现在做一个连续通信程序,我为服务器,别人向我发送一个请求链接,也就是为我建立一个通信链路,我通过这个链路连续不断的向其发送数据,现在发送间隔为一分钟。现在问题是断线的次数太多。只要链路不通。客户端就主动向服务器发送请求建立链路。想请教高手,怎样才能在这个链路上持续不断的发送数据?还有出现这种断线的原因可能是那些或者给提供一些思路,不胜感激!!!

解决方案 »

  1.   

    你用的tcp吧。我觉得是不是可以建立tcp连接后开始发信息,之后每隔一定时间发送空包。这样的目的是保留住这个tcp连接。我以前试过增加socket的延时时间,但貌似不是很管用还是会断开。你可以每隔10秒发空包,每隔一分钟发实际要发的包。当然还是会有可能会断开,那样就重新connect了。
      

  2.   

    tcp连接长时间不用有时就会断的,我以前遇到过,所以要每隔较短时间发送维持连接的空包。
    如果连接服务的客户端数量不多的话是不是可以用一次就联一次,完事就close了,下次再用再联
      

  3.   

    如果数据包不是太大,连续不断发送的我还真就推荐udp通信,无状态省很多事
    udp不通或者阻断的,一般tcp同样也不行,所以...
    可以适当的在udp包中添加验证字。
      

  4.   

    Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
      

  5.   

    TCP连接一般不会无缘无故断开的,应该从客户端上查找原因,因为是它认为断开了。
      

  6.   

    good good study,day day up
      

  7.   


    不表示它一定有问题,要看它怎样判断Socket断开,再跟你服务器端比较。比如我用c#写的都是判断接收到空信息就表示连接断开(目前为止我知道的最有效的方法),因此如果用空信息作为握手包就适得其反了。
    原则上,首先你要知道是你的服务器主动断开,还是客户端主动断开,再查找断开的原因。握手包只是用来处理网络异常断开的情况,Socket主动断开是可以检测出来的。
      

  8.   

    利用 心跳机制 也就跟上面有人说的差不多。
    定时的客户端向服务器请求,判断是否连接,长时间不用,socket肯定断掉。
      

  9.   

    试一下设置socket的keepalive为true 
      

  10.   

    我倒  楼主说的是这个问题啊  我在你空间留言你没看到?
    你们的服务器也是一两台,但客户端可能分部在全国各地?
    一般来说这样是没有完美的解决方案的
    我的项目,开始遇到和你一样的问题
    开始用KEEPALIVE做,测试1个月后,发现效果不理想
    后来自己做心跳包
    把整个通信架构都改过来了  用的是非阻塞模式
    心跳包发送的时间动态变化,网络越不稳定,时间越短
    3个月运行下来,基本可行