如何从tcp / ip channel收到响应时收到通知

时间:2013-07-10 15:15:06

标签: c# multithreading tcp-ip

我必须通过TCP / IP同步发送和接收消息。我使用了此链接中的示例 - http://msdn.microsoft.com/en-us/library/kb5kfec7.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 但是我不得不在发送和接收之间引入Sleep(下面提到),否则我得到空消息。

// 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);

请建议我怎样才能等到收到回复。 谢谢,

2 个答案:

答案 0 :(得分:1)

首先,感谢大家的启动和投入,以解决这个问题。

是的,这个问题是由于对客户端和服务器之间通信的误解而出现的。服务器在多个数据包中发送响应消息 - 它最后按标头,消息和尾部数据包的顺序发送数据。所以我的客户端 - 接收方法假定它已经收到第一个标头并尝试反序列化到一个对象并且失败后收到完整的消息

当我作为故障排除的一部分给出睡眠声明时,它正在工作,因为它在此时间内收到完整的消息。

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

答案 1 :(得分:0)

您应该检查以下内容:

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

无论如何,你需要醒来,不要再睡觉了。