在服务器端和客户端都有catch(socketexception)
一般情况下,一方断开, 另一方是知道的. 并且装了几台测试都没问题.
现在有一台机器, 客户端连服务器上后, 中间隔十分钟, 什么数据也没传, 也没有显示异常断开,
但过十多分钟, 发数据没有成功, 实际上是断开了.
但是如果连接后, 客户端不停的发数据, 过几十分钟都没断开.
这是什么原因? 是不是可能windows 2003配置的问题, socket建立后, 一段时间不传数据, 会自己断开?
13 个解决方案
#1
每隔一段時間,發點東西過去,維持心跳
#2
现在我想知道...为什么...它为无原因的断开?
在服务器,和客户端看端口活动情况,,,都是存在的.
在服务器,和客户端看端口活动情况,,,都是存在的.
#3
楼主用的是什么端口,有可能是端口的原因..
#4
帮顶
#5
socket UDP连接是不信任连接,一方断开,一方是不知道
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了
#6
Socket UDP是无连接协议,不存在断不断开的情况。
Socket TCP才会有断开的情况,楼主应该把你的网络环境告诉我们,不然我们给出的答案也有可能不是你要的。
初步判断是某个基础连接(如:拨号连接及其它可断开网络)设置了空闲时间断开,所以会发生这样的现象。
你可以用TCP协议的Keep-Alive机制来检测连接的当前状态。
具体你可以去看看我的Blog: http://blog.csdn.net/wzd24
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硬件设备....好像也不是
我直接用的socket tcp连接...
网络环境应该没问题....都100M的电信环境...
前面说的..装在有些台上一点问题都没有..
其中有一台, 连接后没有数据发送...10分钟后就会断开,,,,但是两端cath不到断开异常...
现在我改了程序...就是客户端每隔一分钟发个小数据到服务器端.... 一直不会断开
所以我感到非常奇怪
我有点怀疑这台机子上对sockect连接有检测.,,,发现空连接会自动断开, 这台机子上就装了瑞星的杀毒软件,,好像也没有这种功能; 怀疑是ids/ips硬件设备....好像也不是
#11
与设备无关,心跳包是需要的
#12
搞不清....
#13
应该是数据包丢掉,造成程序出错,你发小的数据包就不会出现..
#1
每隔一段時間,發點東西過去,維持心跳
#2
现在我想知道...为什么...它为无原因的断开?
在服务器,和客户端看端口活动情况,,,都是存在的.
在服务器,和客户端看端口活动情况,,,都是存在的.
#3
楼主用的是什么端口,有可能是端口的原因..
#4
帮顶
#5
socket UDP连接是不信任连接,一方断开,一方是不知道
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了
socket TCP连接是信任连接,一方断开,一方是知道的,但有时由于网络原因,一方断开,一方可能不知道,所以最好是双方隔一端时间(如:60秒)互发心跳包,心跳包你可以设置成一定的格式,再接收数据时,不考虑心跳包的数据,如果3次(具体次数自己定)没有收到对方心跳包,则认为对方断开连接了
#6
Socket UDP是无连接协议,不存在断不断开的情况。
Socket TCP才会有断开的情况,楼主应该把你的网络环境告诉我们,不然我们给出的答案也有可能不是你要的。
初步判断是某个基础连接(如:拨号连接及其它可断开网络)设置了空闲时间断开,所以会发生这样的现象。
你可以用TCP协议的Keep-Alive机制来检测连接的当前状态。
具体你可以去看看我的Blog: http://blog.csdn.net/wzd24
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硬件设备....好像也不是
我直接用的socket tcp连接...
网络环境应该没问题....都100M的电信环境...
前面说的..装在有些台上一点问题都没有..
其中有一台, 连接后没有数据发送...10分钟后就会断开,,,,但是两端cath不到断开异常...
现在我改了程序...就是客户端每隔一分钟发个小数据到服务器端.... 一直不会断开
所以我感到非常奇怪
我有点怀疑这台机子上对sockect连接有检测.,,,发现空连接会自动断开, 这台机子上就装了瑞星的杀毒软件,,好像也没有这种功能; 怀疑是ids/ips硬件设备....好像也不是
#11
与设备无关,心跳包是需要的
#12
搞不清....
#13
应该是数据包丢掉,造成程序出错,你发小的数据包就不会出现..