只有UDP和移动连接才需要心跳包...
但是,如果客户端瓜了,服务器就不知道客户端瓜了
-------------
有个名词叫“Time Out”...

解决方案 »

  1.   

    那要怎样知道TIME OUT??还有,如果要用定时器去做TIME OUT,万一定时器的时间已到,但其它线程还在占用SOCKET,这时定时器正要用SOCKET来发检测TIME OUT的包,这样会不会引起异常???
      

  2.   

    不知道你用的是长连接还是短连接,如果是长连接,那很容易判断客户端是否还没瓜,当然也就不需要心跳了。如果是短连接,那每一次的请求肯定用的不是同一个Socket,那就不用担心其它线程占用了。至于怎么判断超时,到MSDN里查查Socket.SendTimeout和Socket.ReceiveTime属性的帮助,里面有例子的。
      

  3.   

    用Keep-ALive可以检测网络是否被断开,具体的你可以去看看我的Blog:http://wzd24.cnblogs.com
      

  4.   

    time out 肯定是要用的,即使是握手的心跳包不也要3次握手嘛,,比较同意andy888666(andy) 的做法
      

  5.   

    andy888666(andy)能给呢例子吗???wzd24(牧野)兄,我用Keep-ALive办法没有作用啊,我要立刻知道网络是否被断开,而且当时我没有执行Send或者Recvice操作.所以要用心跳包.
      

  6.   

    用TIMER,我就怕发其它线程在发送时,TIMER已经OnTime,但这时Socket不是已经被占用了吗,所以心跳包发不出去.
      

  7.   

    有人说用定时器检测TimeOut吗?不知道lz什么思维...上面 effun(地瓜) 已经说了...到MSDN里查查Socket.SendTimeout和Socket.ReceiveTime属性的帮助,里面有例子的...
      

  8.   

    这个握手信号就是你们内部的协议嘛
    例如:发送这样一条数据
    FFFFFFFFFFFFFFFFFFFF4A000D40000170000170000205  //16进制数
    其中4A是数据包长度 
    000D是功能号
    400001700001700002是数据
    05是校验码   //4A000D400001700001700002做异或
    上下通讯去解析协议 想怎么握手都行,哈哈!我做的是串口通讯
      

  9.   

    effun(地瓜) ( ) 信誉:100  2007-08-07 09:48:49  得分: 0  
     
     
       不知道你用的是长连接还是短连接,如果是长连接,那很容易判断客户端是否还没瓜,当然也就不需要心跳了。如果是短连接,那每一次的请求肯定用的不是同一个Socket,那就不用担心其它线程占用了。至于怎么判断超时,到MSDN里查查Socket.SendTimeout和Socket.ReceiveTime属性的帮助,里面有例子的。
    =========================心跳就是给长连接的。短连接要什么心跳?长连接的问题在于,如果你把网线拔了,服务器要至少2个小时才知道你断了。
     
      

  10.   

    可以,建议使用UDP,如果有一方没有收到包,则认为对方异常,也可以使用串口等方式,IBM的双机热备就是这么搞的。
      

  11.   

    A发送数据到B,B收到后马马上向A发送OK,A收到认为B没有挂。 如果A收不到OK 就在发2次,如果B仍然没有回复OK 则认为B挂了!如果是双向的,B主发A,也采取相同的办法 建立握手
      

  12.   

    那要怎样知道TIME OUT??还有,如果要用定时器去做TIME OUT,万一定时器的时间已到,但其它线程还在占用SOCKET,这时定时器正要用SOCKET来发检测TIME OUT的包,这样会不会引起异常???====================================无语....你说会不会异常
      

  13.   

    我的程序其实就是一个游戏,主机是游戏大厅,客户端是游戏,我现在要完成的是长连接,我的问题是,如果我的客户端突然因网络,或者是程序错误而没有SOCKET.CLOSE的话,这样大厅还一直存在这个客户端,这个出错的客户端就会不能重新连接上大厅,同样道理,在大厅因网络,或者是程序错误而没有SOCKET.CLOSE的话客户端仍然在游戏中,因为主机与客户端之间是很小数据交换的,所以用TIMEOUT,SO_KEEPALIVE不能立刻反应主机与客户端的连接状态,所以要用到心跳包.
      

  14.   

    Keep-Alive就是心跳包机制,而且这个心跳发送的时间间隔是可以调整的!
      

  15.   

    求一个简单的心跳包的例子![email protected]  十二分感谢!