【发布时间】:2011-07-28 07:27:48
【问题描述】:
我有一个在 Windows 7 台式 PC 上运行的服务器,以及一个在 Windows XP Lenovo 笔记本电脑上运行的客户端。
以下循环不断发生:
- 客户端正在广播包含一些 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)
【问题讨论】:
-
我猜这不是字节序问题,是吗?
-
看起来不像,因为大约 20 秒后数据正确......而在 Wireshark 中,数据一直都是正确的......非常奇怪。
-
另一个提示可能是......在我关闭服务器后......客户端仍然会收到一段时间的UDP数据包:D
-
@todda 可能是套接字问题,所以是 Windows 的问题
-
会不会是其他应用程序巧合地在同一端口上发送广播数据包?您可以尝试在不同的端口发送/接收以检查...