38 个解决方案
#1
将超时拉长或者建立TCP连接
#2
设置超时长一些,或者定时发少量数据,不要让连接空闲间隔太长
#3
你用的tcp吧。我觉得是不是可以建立tcp连接后开始发信息,之后每隔一定时间发送空包。这样的目的是保留住这个tcp连接。我以前试过增加socket的延时时间,但貌似不是很管用还是会断开。你可以每隔10秒发空包,每隔一分钟发实际要发的包。当然还是会有可能会断开,那样就重新connect了。
#4
我没有设置时间超时,这个链接是客户端建立的,发现断了,客户端主动连接我!现在测试了十几天,断线此时大概1000多次。
#5
这种方法可以尝试下,这个事防止没有的时候被系统释放掉吗?
#6
期待高手出现…………
#7
tcp连接长时间不用有时就会断的,我以前遇到过,所以要每隔较短时间发送维持连接的空包。
如果连接服务的客户端数量不多的话是不是可以用一次就联一次,完事就close了,下次再用再联
如果连接服务的客户端数量不多的话是不是可以用一次就联一次,完事就close了,下次再用再联
#8
如果数据包不是太大,连续不断发送的我还真就推荐udp通信,无状态省很多事
udp不通或者阻断的,一般tcp同样也不行,所以...
可以适当的在udp包中添加验证字。
udp不通或者阻断的,一般tcp同样也不行,所以...
可以适当的在udp包中添加验证字。
#9
规定是客户端给发链路维持,服务器无权连接客户端。我试验下使用心跳包!
#10
实际上正相反,如果是只有十几个客户端的小玩意,但是客户端像灌水一样不停地与服务器顺序通讯,此时或许长连接更好一点。
如果有非常多客户端,并且客户端各个半分钟、几分钟才突然发起十几个并行连接,这时候短连接最好。
长连接代码,适合在课堂上做练习。
#11
不要让连接空闲间隔太长,可定时发少量数据
#12
客户端很少,就几个,而且如果连接不断开的话就客户端不会重复进行链接。功能很简单,主要是稳定,减少连接次数……所以长连接比较好,但是这个长连接怎样做才能更稳定呢?
#13
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
#14
TCP连接一般不会无缘无故断开的,应该从客户端上查找原因,因为是它认为断开了。
#15
是一种方法,我试验下……
#16
客户端应该没问题,因为好多服务器都向他发数据,其他的程序都很少断掉……我的断掉的多……
#17
good good study,day day up
#18
别的程序连接都正常,所以客户端是没有问题的
#19
学习~~~~~~~~~~~~~~~~~~~~~~~~~`
#20
不表示它一定有问题,要看它怎样判断Socket断开,再跟你服务器端比较。比如我用c#写的都是判断接收到空信息就表示连接断开(目前为止我知道的最有效的方法),因此如果用空信息作为握手包就适得其反了。
原则上,首先你要知道是你的服务器主动断开,还是客户端主动断开,再查找断开的原因。
握手包只是用来处理网络异常断开的情况,Socket主动断开是可以检测出来的。
#21
#22
测试中,期待其他方法
#23
断线的原因是什么?是不是代码中循环的问题?
用长连接。
用长连接。
#24
何为长连接?
#25
厉害啊,学习了.
#26
测试中,已经一天了还没有断掉,采用楼上几位的方法……,期待其他方法………………
#27
利用 心跳机制 也就跟上面有人说的差不多。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
#28
如果可以,你还是把代码监听代码发上来看看,
10楼的看法是正确的,主要看你的客户端个数是否很多?发送包的频率有多高?
请问,你的连接断开原因有找到吗?
正常断开,程序控制的断开?
网络中断?
异常断开?
建议你还是使用长连接吧,用多线程实现,即客户端一旦与服务器建立连接,可以连续的不间断的发送数据包,
同时建议你建立一个客户端与服务器端数据包的确认回发机制,即服务器端没收到一次数据,回发确认。
10楼的看法是正确的,主要看你的客户端个数是否很多?发送包的频率有多高?
请问,你的连接断开原因有找到吗?
正常断开,程序控制的断开?
网络中断?
异常断开?
建议你还是使用长连接吧,用多线程实现,即客户端一旦与服务器建立连接,可以连续的不间断的发送数据包,
同时建议你建立一个客户端与服务器端数据包的确认回发机制,即服务器端没收到一次数据,回发确认。
#29
服务器端每收到一次数据,回发确认。
#30
呵呵,我们只负责服务端的开发,客户端改不了,也不能改!所以没有确认!不知道是什么原因断开,测不了,客户端收不到数据或者检测连接已经中断就重新建立连接,我是服务端,只能按照客户端的方式走!
快两天了,目前一次断开还没有……
#31
应该是心跳起作用了,现在还没断开!
#32
期待好的建议出现…………
#33
试一下设置socket的keepalive为true 。。。
#34
恩,设置过了
#35
自己顶起……………………
#36
在顶一下啊…………
#37
我倒 楼主说的是这个问题啊 我在你空间留言你没看到?
你们的服务器也是一两台,但客户端可能分部在全国各地?
一般来说这样是没有完美的解决方案的
我的项目,开始遇到和你一样的问题
开始用KEEPALIVE做,测试1个月后,发现效果不理想
后来自己做心跳包
把整个通信架构都改过来了 用的是非阻塞模式
心跳包发送的时间动态变化,网络越不稳定,时间越短
3个月运行下来,基本可行
你们的服务器也是一两台,但客户端可能分部在全国各地?
一般来说这样是没有完美的解决方案的
我的项目,开始遇到和你一样的问题
开始用KEEPALIVE做,测试1个月后,发现效果不理想
后来自己做心跳包
把整个通信架构都改过来了 用的是非阻塞模式
心跳包发送的时间动态变化,网络越不稳定,时间越短
3个月运行下来,基本可行
#38
xiexie
#1
将超时拉长或者建立TCP连接
#2
设置超时长一些,或者定时发少量数据,不要让连接空闲间隔太长
#3
你用的tcp吧。我觉得是不是可以建立tcp连接后开始发信息,之后每隔一定时间发送空包。这样的目的是保留住这个tcp连接。我以前试过增加socket的延时时间,但貌似不是很管用还是会断开。你可以每隔10秒发空包,每隔一分钟发实际要发的包。当然还是会有可能会断开,那样就重新connect了。
#4
我没有设置时间超时,这个链接是客户端建立的,发现断了,客户端主动连接我!现在测试了十几天,断线此时大概1000多次。
#5
这种方法可以尝试下,这个事防止没有的时候被系统释放掉吗?
#6
期待高手出现…………
#7
tcp连接长时间不用有时就会断的,我以前遇到过,所以要每隔较短时间发送维持连接的空包。
如果连接服务的客户端数量不多的话是不是可以用一次就联一次,完事就close了,下次再用再联
如果连接服务的客户端数量不多的话是不是可以用一次就联一次,完事就close了,下次再用再联
#8
如果数据包不是太大,连续不断发送的我还真就推荐udp通信,无状态省很多事
udp不通或者阻断的,一般tcp同样也不行,所以...
可以适当的在udp包中添加验证字。
udp不通或者阻断的,一般tcp同样也不行,所以...
可以适当的在udp包中添加验证字。
#9
规定是客户端给发链路维持,服务器无权连接客户端。我试验下使用心跳包!
#10
实际上正相反,如果是只有十几个客户端的小玩意,但是客户端像灌水一样不停地与服务器顺序通讯,此时或许长连接更好一点。
如果有非常多客户端,并且客户端各个半分钟、几分钟才突然发起十几个并行连接,这时候短连接最好。
长连接代码,适合在课堂上做练习。
#11
不要让连接空闲间隔太长,可定时发少量数据
#12
客户端很少,就几个,而且如果连接不断开的话就客户端不会重复进行链接。功能很简单,主要是稳定,减少连接次数……所以长连接比较好,但是这个长连接怎样做才能更稳定呢?
#13
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
#14
TCP连接一般不会无缘无故断开的,应该从客户端上查找原因,因为是它认为断开了。
#15
是一种方法,我试验下……
#16
客户端应该没问题,因为好多服务器都向他发数据,其他的程序都很少断掉……我的断掉的多……
#17
good good study,day day up
#18
别的程序连接都正常,所以客户端是没有问题的
#19
学习~~~~~~~~~~~~~~~~~~~~~~~~~`
#20
不表示它一定有问题,要看它怎样判断Socket断开,再跟你服务器端比较。比如我用c#写的都是判断接收到空信息就表示连接断开(目前为止我知道的最有效的方法),因此如果用空信息作为握手包就适得其反了。
原则上,首先你要知道是你的服务器主动断开,还是客户端主动断开,再查找断开的原因。
握手包只是用来处理网络异常断开的情况,Socket主动断开是可以检测出来的。
#21
#22
测试中,期待其他方法
#23
断线的原因是什么?是不是代码中循环的问题?
用长连接。
用长连接。
#24
何为长连接?
#25
厉害啊,学习了.
#26
测试中,已经一天了还没有断掉,采用楼上几位的方法……,期待其他方法………………
#27
利用 心跳机制 也就跟上面有人说的差不多。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
#28
如果可以,你还是把代码监听代码发上来看看,
10楼的看法是正确的,主要看你的客户端个数是否很多?发送包的频率有多高?
请问,你的连接断开原因有找到吗?
正常断开,程序控制的断开?
网络中断?
异常断开?
建议你还是使用长连接吧,用多线程实现,即客户端一旦与服务器建立连接,可以连续的不间断的发送数据包,
同时建议你建立一个客户端与服务器端数据包的确认回发机制,即服务器端没收到一次数据,回发确认。
10楼的看法是正确的,主要看你的客户端个数是否很多?发送包的频率有多高?
请问,你的连接断开原因有找到吗?
正常断开,程序控制的断开?
网络中断?
异常断开?
建议你还是使用长连接吧,用多线程实现,即客户端一旦与服务器建立连接,可以连续的不间断的发送数据包,
同时建议你建立一个客户端与服务器端数据包的确认回发机制,即服务器端没收到一次数据,回发确认。
#29
服务器端每收到一次数据,回发确认。
#30
呵呵,我们只负责服务端的开发,客户端改不了,也不能改!所以没有确认!不知道是什么原因断开,测不了,客户端收不到数据或者检测连接已经中断就重新建立连接,我是服务端,只能按照客户端的方式走!
快两天了,目前一次断开还没有……
#31
应该是心跳起作用了,现在还没断开!
#32
期待好的建议出现…………
#33
试一下设置socket的keepalive为true 。。。
#34
恩,设置过了
#35
自己顶起……………………
#36
在顶一下啊…………
#37
我倒 楼主说的是这个问题啊 我在你空间留言你没看到?
你们的服务器也是一两台,但客户端可能分部在全国各地?
一般来说这样是没有完美的解决方案的
我的项目,开始遇到和你一样的问题
开始用KEEPALIVE做,测试1个月后,发现效果不理想
后来自己做心跳包
把整个通信架构都改过来了 用的是非阻塞模式
心跳包发送的时间动态变化,网络越不稳定,时间越短
3个月运行下来,基本可行
你们的服务器也是一两台,但客户端可能分部在全国各地?
一般来说这样是没有完美的解决方案的
我的项目,开始遇到和你一样的问题
开始用KEEPALIVE做,测试1个月后,发现效果不理想
后来自己做心跳包
把整个通信架构都改过来了 用的是非阻塞模式
心跳包发送的时间动态变化,网络越不稳定,时间越短
3个月运行下来,基本可行
#38
xiexie