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

时间:2011-07-13 17:08:07

标签: windows-mobile tcp wifi pocketpc

当wi fi连接断开然后再次重新连接时,我在TCP套接字上读取时遇到了特殊问题

场景:我不断通过wi fi ping Windows口袋PC设备上的服务器。            当设备处于wifi弱信号强度区域时,套接字读取无限制地阻塞并完全冻结设备,当wi fi信号强度变强时,读取返回并执行屏幕上的所有先前操作。

任何人都可以解决这个问题

2 个答案:

答案 0 :(得分:0)

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

您可以通过更改TCP超时值来稍微修改或调整此行为 - 如果连接在超时期间(通常默认为10分钟)根本无法发送数据,则连接将关闭。根据您使用的API,您可能可以将此超时更改为几秒钟(但要注意使其太短,这会导致您因网络问题更加短暂而断开连接。)

听起来您的代码中存在暂停连接完全锁定设备的问题 - 这可能是因为在尝试从连接中读取数据时不应该保留一些锁定。确保在执行套接字读取(或写入)之前释放所有锁定。如果您可以解决此问题,您可能会发现您并不关心TCP超时。

答案 1 :(得分:0)

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