我目前正在开展一个项目,我需要通过GPRS从设备接收数据。这些设备将数据发送到侦听服务器端口的TCP服务器。我首先遇到连接多个设备的问题,经过一些研究后我了解到我应该实现异步方法。我现在有1个TCP套接字侦听传入连接,并且一旦请求进入,就会将其置于新的套接字连接中,释放侦听套接字以进行其他连接尝试。
我的挑战:我正在使用2台设备进行测试,这些设备连接成功,可以发送数据。当我关闭设备(取出电池和SIM卡)时,我无法检测到此设备不再连接并关闭插座。在侦听器的端口上运行netstat时,我仍然看到2个连接“ESTABLISHED”的设备。
我尝试了各种示例,但各种套接字轮询选项都返回'true'。现在唯一可行的选择是尝试向套接字发送一些数据,这些数据将失败并被捕获,然后返回false值。在套接字上设置ReceiveTimeout属性也没有帮助。 我试过了:
socket.Poll(1000, SelectMode.SelectWrite); //returns true
socket.Poll(1000, SelectMode.SelectRead); //returns true
socket.Available = 0 (available);
答案 0 :(得分:0)
使用
之类的代码 'if(socket.Connected) { socket.Write(...) }
创造竞争条件。你最好只是调用socket.Write并处理异常和/或断开连接。
套接字层应使用异常进行管理。抛出的IOException将内部异常设置为SocketException,其中包含远程检测超时或关闭套接字所需的所有信息