我在Windows 7桌面PC上运行服务器,在Windows XP Lenovo笔记本电脑上运行客户端。
以下内容在循环中发生:
我在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 :(得分:0)
在这里稍作猜测。
我无法想象您的UDP数据包在某处出现了20秒。在全球范围内通过公共互联网进行的RTT通常比那时少40倍。因此,我认为您只是不断重新发送数据,直到获得预期的响应。
如果我对我的假设是对的,那么你看到的是正常的UDP 丢包。这台笔记本电脑是否在无线链接上?客户端应用程序是否会阻止某些输入?
在笔记本电脑上也运行wireshark
。您是否看到与发送方(服务器)端相同的数据包和序列?如果是这样,那么客户端就不会足够快地使用这些数据包。如果您实际上在20秒的延迟时间内看到客户端上的数据包,那么您真的需要描述更多的设置以解释这些魔法:)
答案 1 :(得分:0)
感谢您的回答.. 问题是sendto方法在笔记本电脑上的表现与桌面相比有所不同。 在laptot sendto发送3个UDP数据包,在destop上只有一个。 我的应用程序只期望一个数据包,因此处理时间+乘以3会给人一种延迟的印象。 我不明白为什么会这样,但这就是问题。