当wi - fi连接中断时,TCP套接字读取挂起



当wi - fi连接断开然后再次重新连接时,我面临着TCP套接字读取的特殊问题

场景:我通过wi - fi不断ping到windows pocket PC设备上的服务器。当设备处于wifi弱信号强度区域时,socket read无限期阻塞并完全冻结设备,当wi - fi信号强度变强时,read返回并执行屏幕上之前的所有操作。

谁能给出解决这个问题的方法

这是TCP的一个特性——TCP是可靠的,所以如果出现任何类型的网络问题(如您所描述的wifi信号丢失),数据将被缓冲并保存,直到问题消失,此时数据将再次发送,连接将恢复。

您可以通过更改TCP超时值来修改或调整此行为—如果连接在超时时间(默认情况下通常为10分钟)内根本无法发送数据,则连接将关闭。根据您使用的API,您可以将此超时更改为几秒(不过要注意不要将其设置得太短,否则会导致由于更多瞬态网络问题而导致连接中断)

听起来你的代码中有一个问题,暂停的连接完全锁定了设备——这可能是由于在尝试从连接读取数据时持有一些不应该的锁引起的。确保在执行套接字读(或写)之前释放所有锁。如果你能解决这个问题,你可能会发现你不关心TCP超时

几年前我曾经遇到过类似的问题,但我改变了我的实现,在服务器和手持设备上使用异步套接字。确保您捕获了异常并跟踪了读取/发送的字节数,并且可以在通知另一个端点"重新建立"连接后再次选择备份(以便另一方不会试图完全从头开始....

最新更新