Delphi Tserversocket игнорирует 1-е сообщение - PullRequest
1 голос
/ 05 октября 2011

Просьба сообщить, почему это происходит. в простом примере приложения сервера у меня есть следующий код:

procedure TForm13.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var str : string;
begin
  str := socket.ReceiveText;
  showmessage(str);
end;

и на стороне клиента у меня есть

clientsocket1.Open;
clientsocket1.Socket.SendText(txtMSG.Text);

ничего особенного. Странно то, что когда я отправляю сообщение на сервер в первый раз, оно игнорируется. каждый раз после этого это прекрасно работает. событие ClientRead вообще не срабатывает при первом сообщении

что я могу изменить на сервере, чтобы он принял 1-е сообщение. У меня нет контроля над клиентской стороной, так как третье лицо отправляет мне сообщения, но я всегда пропускаю 1-е сообщение.

спасибо!

1 Ответ

3 голосов
/ 05 октября 2011

Если вы используете TClientSocket в неблокирующем режиме (по умолчанию), вы не можете отправить данные сразу после возврата Open(), так как соединение еще не готово. Вам нужно подождать, пока сначала не будет запущено событие OnConnect, например:

Procedure TForm1.StartConnectingToServer;
Begin
  ClientSocket1.Open;
End;

Procedure TForm1.ClientSocket1Connect(Socket: TCustomWinSocket);
Begin
  Socket.SendText(txtMSG.Text);
End;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...