请告知为什么会发生这种情况。 在一个简单的示例服务器应用程序上,我有以下代码:
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事件在第一条消息上根本不会触发
我可以在服务器上更改什么以使其接受第一条消息。 我无法控制客户端,因为第三方向我发送消息,我总是错过第一条消息。
谢谢!
答案 0 :(得分:3)
如果您在非阻塞模式下使用TClientSocket
(这是默认设置),则在Open()
返回后不能立即发送数据,因为连接尚未就绪。您必须等待首先触发OnConnect
事件,例如:
Procedure TForm1.StartConnectingToServer;
Begin
ClientSocket1.Open;
End;
Procedure TForm1.ClientSocket1Connect(Socket: TCustomWinSocket);
Begin
Socket.SendText(txtMSG.Text);
End;