套接字recv在Windows XP中挂起
问题描述:
我已经通过USB在Android设备和Windows主机之间建立了TCP/IP套接字连接。用于连接的端口是8000/8001。这种通信模式在Windows 7和其他生态系统中运行得非常好,而在Windows XP 32位上,“recv”API无限期地挂起。套接字recv在Windows XP中挂起
我写了一个示例程序,其中服务器和客户端在Windows XP主机上运行,并且工作正常,但是当涉及到USB时,就会出现问题。我使用了一个嗅探工具“USB analyzer”工具来嗅探来自设备的数据,并看到数据传入设备,但不知何故recv API无法捕获它。
我所使用的代码是存在于下面的链接: http://www.tenouk.com/Winsock/Winsock2example9.html
谢谢, 书呆子
编辑:仅在Windows XP 32位,而不是在64位发生此问题。
编辑2:我发现这个黑客攻击,建立连接后立即服务器将发送一个虚拟数据,客户端将捕获它。如果这样做,那么recv将不会进一步挂起。任何线索为什么这是必需的?
答
在recv解决此问题之前添加一些延迟(100 ms)。但我不知道为什么会出现这种情况的确切原因。
你正在使用的是:TCP套接字还是UDP套接字? – EJP
我正在使用TCP套接字。我还发现,在recv之前添加一些延迟工作正常。 – nerd
它不应该有丝毫差别,除非你处于非阻塞模式,在这种情况下,你应该使用'select()'而不是睡眠。 – EJP