delphi tserversocket 忽略第一条消息

标签 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 事件根本不会在第一条消息上触发

我可以在服务器上更改什么以使其接受第一条消息。 当第 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/

相关文章:

delphi - 搜索具有动态布局的自定义缩略图查看器组件

delphi - Delphi Firemonkey中的鼠标事件动画

java - 将文件传输到客户端java后保持套接字连接打开

java - 是否有任何库来管理 Android 上的 TCP 数据包?

java - Camel : stop the route when the jdbc connection loss is detected

java - 文件开头不需要的字符,通过 TCP 连接在 Android 和 PC 之间发送

delphi - 是否可以旋转元文件图像而不将其转换为位图?

Delphi:有什么方法可以链接到 BPL 中尚未打包的变量吗?

ruby - 如何使用 Unix 套接字对通信 Rust 和 Ruby 进程

java - 无法使用serversocket在java中同时读取和发送请求