大神们有没有遇到过网络通信实机上成功了,但是socket的read就是失败的情况(timeout)啊。
wireshark抓包确认服务器端的数据已经回来了。
用winsocket写个测试程序也是ok的。
设置socket的Timeout时间为10s也不行
摘别人的:
3 socket读超时
如果输入缓冲队列RecvQ中没有数据,read操作会一直阻塞而挂起线程,直到有新的数据到来或者有异常产生。调用setSoTimeout(int timeout)可以设置超时时间,如果到了超时时间仍没有数据,read会抛出一个SocketTimeoutException,程序需要捕获这个异常,但是当前的socket连接仍然是有效的。
如果对方进程崩溃、对方机器突然重启、网络断开,本端的read会一直阻塞下去,这时设置超时时间是非常重要的,否则调用read的线程会一直挂起。
TCP模块把接收到的数据放入RecvQ中,直到应用层调用输入流的read方法来读取。如果RecvQ队列被填满了,这时TCP会根据滑动窗口机制通知对方不要继续发送数据,本端停止接收从对端发送来的数据,直到接收者应用程序调用输入流的read方法后腾出了空间。
原贴url:"ttp://blog.csdn.net/sureyonder/article/details/5633647"
所以根据它说的,你的呢个错误不是错误,而是正常!汗!注意你的抓包频率,假如你10秒抓一次包,设置超时时间为15秒,就不会出现呢个异常了
正常时间应该是你抓包频率的1.5倍吧,
这个找到方法修改了,数据发送和数据接收放在两个线程中,就好用了。想来想去也没想出来原因。
毕竟有些命令发送和接收在一个线程中就行。
因为也看不到服务器端的代码。所以暂时先不管了。