delphi tserversocket忽略第一条消息

时间:2011-10-05 14:38:05

标签: delphi sockets tcp

请告知为什么会发生这种情况。 在一个简单的示例服务器应用程序上,我有以下代码:

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 个答案:

答案 0 :(得分:3)

如果您在非阻塞模式下使用TClientSocket(这是默认设置),则在Open()返回后不能立即发送数据,因为连接尚未就绪。您必须等待首先触发OnConnect事件,例如:

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

Procedure TForm1.ClientSocket1Connect(Socket: TCustomWinSocket);
Begin
  Socket.SendText(txtMSG.Text);
End;