소켓으로 클라이언트 프로그램을 만들고 있습니다.
1 : 1 이 아니고
서버가 여러개고 클라이언트가 하나인 프로그램입니다
서버가 여러개인 관계로 DB 에 서버 IP 하고 PORT 를 저장해놓고
FOR 문을 돌려서 서버마다 다른 메세지를 전달하는 방식입니다
먼저 DB 에 접속해서 서버 IP 하고 Port 번호를 쭈~욱 받아오구여
for 문을 돌려서 그때그때 서버 IP 하고 Port 번호를 배열에 집어넣습니다
** scount 는 전역변수입니다
while not ADOQuery1.Eof do
begin
server_name[scount] := ADOQuery1.FieldByName('name').AsString;
server_address[scount] := ADOQuery1.FieldByName('address').AsString;
server_port[scount] := ADOQuery1.FieldByName('port').AsInteger;
Inc(scount);
ADOQuery1.Next;
end;
그리고 어떤 처리를 한담에 For 문을 돌립니다
** mess 는 전역변수입니다
for i := 0 to scount do
begin
if server_name[i] = '개똥이' then
begin
clientsocket1.address = server_address[i];
clientsocket1.port = server_port[i];
mess := '개똥아 안녕..';
ClientSocket1.Active := True
end
else if server_name[i] = '말똥이' then
begin
clientsocket1.address = server_address[i];
clientsocket1.port = server_port[i];
mess := '말똥아 안녕..';
ClientSocket1.Active := True
end
else if server_name[i] = '소똥이' then
begin
clientsocket1.address = server_address[i];
clientsocket1.port = server_port[i];
mess := '소똥아 안녕..';
ClientSocket1.Active := True
end
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
clientsocket1.socket.SendText(mess);
end;
프로그램 줄기는 대충 이렇구여 다른 부분은 이상이 없습니다.
문제는 전 저렇게 하면 각 서버에 다른 메제시가 날아갈 줄 알았거든여
근데 실제로 메세지를 보내면 배열에 저장된 마지막 서버로 모든 메세지가
날아가 버립니다
나머지 서버들은 메세지를 받질 못하더군여.. -_-;;
서버에 접속이 되기전에 서버주소하고 포트번호를 계속
덮어버리는거 같은데여..
소켓은 하나만 생성하고 여러개의 서버에 메세지를 전달할라믄
어떻게 해야할까여..
힌트만이라도 좀 주셨으면 감사하겠습니다.
이거땜에 계속 진도가 안나가여.. -_-;;
부탁드립니다.
코딩 하신다면여...
while not ADOQuery1.Eof do
begin
clientsocket1.address :=ADOQuery1.FieldByName'address').AsString;
clientsocket1.port := ADOQuery1.FieldByName('port').AsInteger;
mess:='말똥인지 소똥인지 if 돌려서 대입하궁';
ClientSocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
clientsocket1.socket.SendText(mess);
ADOQuery1.Next;
end;
위에 깨작거려논거는 졸리 무식한거예여... .... ...
PS : 아글구 커넥팅 하는 시간 재서 건너 뛰세여 뭐 소켓이 하나뿐이닝..
뭐냐문 서버가 꼴가닥 해쓸때....