当收到来自tcp/ip通道的响应时,我如何得到通知

本文关键字:响应 通知 何得 通道 tcp ip | 更新日期: 2023-09-27 18:21:46

我必须通过TCP/IP同步发送和接收消息。我使用了这个链接中的一个例子——http://msdn.microsoft.com/en-us/library/kb5kfec7.aspx?cs-保存lang=1&cs-lang=csharp#code-snippet-1然而,我不得不在发送和接收之间引入睡眠(如下所述),否则我会收到空消息。

// Send the data through the socket.
int bytesSent = sender.Send(msg);
Thread.sleep(1000) // But, I only wanted to be in sleep until response received. 
// Receive the response from the remote device.
int bytesRec = sender.Receive(bytes);

请建议我如何才能等到收到回复。谢谢,

当收到来自tcp/ip通道的响应时,我如何得到通知

首先,感谢大家为解决这个问题而提出的建议和投入。

是的,这个问题是由于对客户端和服务器之间的通信理解错误而出现的。服务器在多个数据包中发送响应消息——它按照头、消息和尾部数据包的顺序发送数据。因此,我的客户端的-ReReceive方法假设它在第一个接收到标头时就收到了完整的消息,并尝试反序列化到对象,但失败

当我给出一个睡眠声明作为故障排除的一部分时,它是有效的,因为它在这段时间内收到了完整的消息。

现在,作为解决方案的一部分,我已经更新了服务器应用程序,以缓冲整个消息并一次写入网络。

您应该检查以下内容:

  • 服务器是否响应您的所有请求
  • 你的请求是同步的吗
  • 请求的超时时间太小了吗

不管怎样,你需要醒来,不要再睡觉了。