现在是服务器和客户端都是自己写,
客户端连接服务器之后可能在某段时间内发很多数据包。比如早上8点到9点之间可能频繁收发很多数据包,
晚上12点就不怎么发包。想实现服务器和客户端保持长连接,是不是必须要不断发送心跳包,
来保持长连接呢? 

解决方案 »

  1.   

    检查Socket是否已经断开,是通过心跳包来实现的吧?发送心跳包的话,
    是不是要使用单独的线程、单独的Socket和端口呢?
      

  2.   

    不需要单独的Socket和端口,也不需要单独的线程,用一个定时器或者什么的,定时发送心跳包就行了,当然为了防止会同时发送心跳包和正常数据,你的逻辑设定好就行了
      

  3.   

    检查Socket是否已经断开,是通过心跳包来实现的吧?
    正常的断开程序会检察得到的,只是非正常意外掉线才要用心跳包来监控
      

  4.   


    sort(vec.begin(), vec.end());
    vector<int>::iterator iter = std::find(vec.begin(), vec.end(), 5);
    if (iter != vec.end())
    rotate(vec.begin(), iter, vec.end());
      

  5.   

    也有维持nat session 的作用
      

  6.   

    单独的线程、单独的Socket和端口呢?哥,心跳包是为一个SOCKET来做的。。你单独的SOCKET与端口做什么? 这心跳包给谁呢?在单独线程中可以这样做!。。心跳包不是必须的!
      

  7.   

    照楼主的意思应该不是UDP的会话保持了,只是TCP的长连接了,那就按照4楼的说法,正常断开,socket都能检测的到,可以立即重连,而连接异常断开或者程序崩溃,那只能通过心跳包来判断,但必须是要维护的那个socket连接跟端口,否则监控就没意义了。