델파이 2010를 사용하구요.
ServerSocket과 ClientSocket으로 소켓프로그램을 하다가 데이터전송을 두번씩 해야 서버에 데이터가 표시됩니다.
아주 간단하게 샘플프로그램으르 만들어 봤더니 역시 마찬가지입니다.
서버측 소스코드입니다.
=================================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Active := false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port := 23;
ServerSocket1.Active := True;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.RemoteAddress + ' sends :') ;
Memo1.Lines.Add(Socket.ReceiveText);
end;
=================================================================================
다음은 클라이언트측 소스코드입니다.
=================================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Port := 23;
ClientSocket1.Host := Edit1.Text;
ClientSocket1.Active := true;
ClientSocket1.Socket.SendText(Edit2.Text);
ClientSocket1.Active := false;
end;
=================================================================================
이렇게 했는데 Button1을 두번 클릭해야 서버의 Memo1에 표시가 됩니다.
클라이언트에서
폼을 오픈할때 미리 ClientSocket1.Active := true; 를 해두면 한번 클릭해도 잘되는걸 보니
ClientSocket1.Active := true;
하고 나서 바로
ClientSocket1.Socket.SendText(Edit2.Text);
를 해주니 문제가 되는것 같은데요.
수시로 여러 피시로 데이터를 보내야 하기 때문에 이렇게 밖에 할 수 없거든요.
어디를 수정해야 하나요?
|