Socket编程, 一个很奇怪的问题. 无异常断开

时间:2021-01-31 20:43:17
一个服务器和客户端程序

在服务器端和客户端都有catch(socketexception)

一般情况下,一方断开, 另一方是知道的. 并且装了几台测试都没问题.

现在有一台机器, 客户端连服务器上后, 中间隔十分钟, 什么数据也没传, 也没有显示异常断开, 
但过十多分钟, 发数据没有成功, 实际上是断开了.

但是如果连接后, 客户端不停的发数据, 过几十分钟都没断开.

这是什么原因? 是不是可能windows 2003配置的问题, socket建立后, 一段时间不传数据, 会自己断开?

13 个解决方案

#1


每隔一段時間,發點東西過去,維持心跳

#2


现在我想知道...为什么...它为无原因的断开?

在服务器,和客户端看端口活动情况,,,都是存在的.

#3


楼主用的是什么端口,有可能是端口的原因..

#4


帮顶

#5


socket UDP连接是不信任连接,一方断开,一方是不知道
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了

#6


Socket UDP是无连接协议,不存在断不断开的情况。
Socket TCP才会有断开的情况,楼主应该把你的网络环境告诉我们,不然我们给出的答案也有可能不是你要的。
初步判断是某个基础连接(如:拨号连接及其它可断开网络)设置了空闲时间断开,所以会发生这样的现象。
你可以用TCP协议的Keep-Alive机制来检测连接的当前状态。
具体你可以去看看我的Blog: http://blog.csdn.net/wzd24

#7


m_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, keepAliveValues, null);

......

#8


不知楼主用的是什么通导方式,是直接通迅还是用socketJS控年,我用的是socketJS控年.

#9


不知道LZ哪儿设置出了问题

#10


首先感谢大家的解答

我直接用的socket tcp连接...

网络环境应该没问题....都100M的电信环境...

前面说的..装在有些台上一点问题都没有..

其中有一台, 连接后没有数据发送...10分钟后就会断开,,,,但是两端cath不到断开异常...


现在我改了程序...就是客户端每隔一分钟发个小数据到服务器端.... 一直不会断开



所以我感到非常奇怪

我有点怀疑这台机子上对sockect连接有检测.,,,发现空连接会自动断开, 这台机子上就装了瑞星的杀毒软件,,好像也没有这种功能; 怀疑是ids/ips硬件设备....好像也不是

#11


与设备无关,心跳包是需要的

#12


搞不清....

#13


应该是数据包丢掉,造成程序出错,你发小的数据包就不会出现..

#1


每隔一段時間,發點東西過去,維持心跳

#2


现在我想知道...为什么...它为无原因的断开?

在服务器,和客户端看端口活动情况,,,都是存在的.

#3


楼主用的是什么端口,有可能是端口的原因..

#4


帮顶

#5


socket UDP连接是不信任连接,一方断开,一方是不知道
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了

#6


Socket UDP是无连接协议,不存在断不断开的情况。
Socket TCP才会有断开的情况,楼主应该把你的网络环境告诉我们,不然我们给出的答案也有可能不是你要的。
初步判断是某个基础连接(如:拨号连接及其它可断开网络)设置了空闲时间断开,所以会发生这样的现象。
你可以用TCP协议的Keep-Alive机制来检测连接的当前状态。
具体你可以去看看我的Blog: http://blog.csdn.net/wzd24

#7


m_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, keepAliveValues, null);

......

#8


不知楼主用的是什么通导方式,是直接通迅还是用socketJS控年,我用的是socketJS控年.

#9


不知道LZ哪儿设置出了问题

#10


首先感谢大家的解答

我直接用的socket tcp连接...

网络环境应该没问题....都100M的电信环境...

前面说的..装在有些台上一点问题都没有..

其中有一台, 连接后没有数据发送...10分钟后就会断开,,,,但是两端cath不到断开异常...


现在我改了程序...就是客户端每隔一分钟发个小数据到服务器端.... 一直不会断开



所以我感到非常奇怪

我有点怀疑这台机子上对sockect连接有检测.,,,发现空连接会自动断开, 这台机子上就装了瑞星的杀毒软件,,好像也没有这种功能; 怀疑是ids/ips硬件设备....好像也不是

#11


与设备无关,心跳包是需要的

#12


搞不清....

#13


应该是数据包丢掉,造成程序出错,你发小的数据包就不会出现..