请告知为什么会这样。 在一个简单的示例服务器应用程序上,我有以下代码:
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 事件根本不会在第一条消息上触发
我可以在服务器上更改什么以使其接受第一条消息。 当第 3 方向我发送消息时,我无法控制客户端,但我总是错过第一条消息。
谢谢!
最佳答案
如果您在非阻塞模式(默认模式)下使用 TClientSocket
,您不能在 Open()
返回后立即发送数据,因为连接还没有准备好。您必须先等待 OnConnect
事件被触发,例如:
Procedure TForm1.StartConnectingToServer;
Begin
ClientSocket1.Open;
End;
Procedure TForm1.ClientSocket1Connect(Socket: TCustomWinSocket);
Begin
Socket.SendText(txtMSG.Text);
End;
关于delphi tserversocket 忽略第一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663055/