Socket自动断开之奇异故障

有一个socket服务,在开发环境一切正常,在生产环境遇到了奇怪故障。

故障现象为,外部无法访问socket服务,但内部可以访问外部,子网内所有服务器均有这个故障。

由于服务器在高防护机房里,所以该故障耗费很长时间才解决。

 

调试办法为,在服务器上启动一个进程,比如windows的command,一直ping网络外部的某个网关或服务器,如果上述故障不再出现,可确定为网络设备故障,可以选择更换网卡或网络设备。我遇到这次是ibm服务器和3com路由器,换路由器后故障解决。

 

另外一次,客户端连接socket服务之后,服务端和客户端程序均显示连接状态,在服务器上netstat 查看也是连接状态,但无法通信,socket实际上断开状态。

但网络中其他服务器一切正常。

调试办法为:外部计算机telnet socket服务,服务器上netstat命令找到该连接,然后外部计算机关机,再次netstat查看,发现状态为连接,那么可以确定为服务器设备故障,更换网卡即可解决。这次是联想万泉服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当使用socket连接时,可能会出现socket反复断开的情况。这种情况可能是由于网络断开、物理死机等原因导致的。在这种情况下,一方的socket异常断开,另一方可能并不知道。例如,在安卓客户端和python服务器建立连接之后,如果其中一方发生断网或物理死机等情况,导致socket异常断开,对方并不知道此时已经断开了连接,因为没有发出请求断开的消息。 在调试bug的过程中,可以发现几种情况非常相似。一种情况是当python服务器物理断开时,安卓客户端仍然认为socket在连接,并且会持续收到空字节包,如果不做处理,可能会导致程序卡死。另一种情况是当安卓客户端物理断开时,python服务器仍然认为socket在连接,并且会持续收到空字节包,也可能导致程序卡死。 为了解决这个问题,可以采取以下方法。首先,服务器可以定时发送自定义心跳包,客户端收到心跳包后立即回应。如果服务器发送心跳包失败,会报异常,此时可以断开连接。同样地,客户端收到心跳包后立即发送回应,如果发送失败也会报异常,此时也可以断开连接。通过这种方式可以实现及时断开连接,避免程序卡死的问题。 此外,还可以参考TCP协议中的三次握手和四次挥手的相关知识,了解不同语言和操作系统对于socket连接建立和断开的处理方式。如果有需要,可以参考一些相关文章和文档来了解更多细节。 总之,当使用socket连接时,需要注意处理断开连接的情况,特别是在跨语言的情况下。通过定时发送心跳包并及时处理异常,可以有效避免socket反复断开的问题发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [安卓客户端与Python服务器socket异常断开](https://blog.csdn.net/IAmYourFarther/article/details/80127092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [关于android:socket.io客户端反复断开连接](https://blog.csdn.net/weixin_36364707/article/details/117553318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值