2011-07-28 69 views
2

我有一台服务器运行在Windows 7台式电脑上,客户端运行在Windows XP联想笔记本电脑上。UDP数据读取不正确(延迟)

下保持在一个循环中发生的事情:

  • 的客户端广播包含一些ID信息的UDP数据包。
  • 服务器获取广播并用另一个带有一些数据的UDP数据包进行应答。

我可以在Wireshark中看到服务器正在发送正确的数据,但RECVFROM函数正在返回一些其他数据。大约20-30秒后,数据最终被正确读取。

如果我在桌面上运行服务器和客户端,它可以正常工作。有任何想法吗?


相关的代码:

do 
    { 
     result=recvfrom(_socket,buff,buffLen,0,(SOCKADDR*)&SenderAddr,&SenderAddrSize); 
     if(result != SOCKET_ERROR) 
     { 
      //small processing 
      ..... 
     //// 
     sendto(_socket,buff,16,0,(SOCKADDR*)&SenderAddr,sizeof(SenderAddr)); 
     } 
    while(true) 
+0

我想这不是一个endianess问题,现在呢? –

+2

看起来不是这样,因为大约20秒后数据正确无误....并且在wireshark中数据始终正确......非常奇怪。 –

+0

另一个提示可能是......关闭服务器之后......客户端仍然获得UDP数据包一段时间:D –

回答

0

以有点猜测这里。

我无法想象你的UDP数据包在某处会有20秒的惊叹。毕竟公共互联网上的全球RTT通常比那个少40倍。所以我认为你只是不断重新发送你的数据,直到你得到预期的回应。

如果我对我的假设是正确的,那么你看到的是一个普通的UDP 数据包丢失。那台笔记本电脑在无线连接上?客户端应用程序是否阻止某些输入?在笔记本电脑上也运行wireshark。你看到与发送者(服务器)端相同的数据包和序列数据包吗?如果是这样,那么客户端不会足够快地使用这些数据包。如果你真的看到客户端上的数据包延迟20秒,那么你真的需要描述更多的设置来解释魔术:)

0

感谢您的回答.. 问题是sendto方法是在笔记本电脑上的表现与桌面相比有所不同。 在laptot sendto正在发送3个UDP数据包,在destop上只有一个。 我的应用程序期望只有一个数据包,所以处理时间+乘以3会产生延迟的印象。 我不明白为什么发生这种情况,但这是问题所在。