client端怎样能检测到server端的关闭连接。在什么消息里处理,最好给出例子
谢谢

解决方案 »

  1.   

    我的处理方法是在client关闭时候发送一个命令,server接到这个命令的时候,关闭该连接。
      

  2.   

    这种方法,在client非法退出的时候,就没用了,我也想寻求一个更好的解决方法,如果你想到了,希望能给我一个消息,谢谢
      

  3.   

    jemmylau(枕头) 你误会楼主意思了。BOOL b = true;
    SetSockOpt( hSocket, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&b, sizeof(BOOL));
      

  4.   

    gz如何自己控制KEEPALIVE的时间呢?
      

  5.   

    看《TCP/IP 详解》卷1:协议,第23章:TCP的保活定时器
      

  6.   

    BOOL b = true;
    SetSockOpt( hSocket, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&b, sizeof(BOOL));
    可以启用Keep Alive数据包,
    关于Keep Alive的时间间隔,可以修改注册表,对于95,98,在
    \HEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP
    对于NT,2000,在
    \HEY_LOCAL_MACHINE\System\CurrentControlSet\Service\TCPIP\Parameters
    但是,修改注册表会影响所有的tcp应用。在2000中,有一个新的I/O控制命令,SIO_KEEPALIVE_VALS,可以针对每一个套接字,设定其保活定时器的时间间隔。
      

  7.   

    重载OnSend函数,在最后的加上一句AsyncSelect(FD_CLOSE|FD_READ)即可
      

  8.   

    对了,还要重载OnClose函数,在OnClose函数内就能收到Server的非正常关闭,
    这些都是从CAsyncSocket类继承过来的
      

  9.   

    To: wxzfox(乐乐) 
    你的方法我试了,怎么不行呢?要怎样用呢?能不能详细说一下xuchuangeng(ageng) 
    你的方法可以。
      

  10.   

    你可以用程序在应用层实现(如xuchuangeng(ageng)的做法)。
    保活操作主要用于另一端主机的非正常关闭,或者连接另一端主机的中间路由器崩溃。呵呵,可能我对你的话理解错误。保活功能主要是为服务器应用程序提供的,用于tcp连接。服务器应用程序希望知道客户主机是否崩溃,是否还需要当前的连接。比如说,当个人计算机用户使用tcp/ip向一个是用Telnet的主机注册,并连接,如果在一天结束时,他们仅仅关闭了电源而没有注销,那么便会留下一个半开放的连接,这时服务器就会傻等,保活功能会帮助服务器监测到这种情况,当然,这只是保活功能检测的情况之一。保活功能的时间间隔默认为2个小时。可能你的程序用不到 :),是我想多了。
      

  11.   

    wxzfox(乐乐) 
    谢谢你的解答,问题解决。
    我要结贴了