我用recv()的返回值等于0检查,好像没有用。

解决方案 »

  1.   

    你说的是dot net
    我问一般的tcp连接断开的检测方法
      

  2.   

    送一个心跳包,就可以解决你的问题了
    如没20秒发一次keeplive的包
      

  3.   

    不是很简单的吗,客户端在断开之前给Server发个消息。
      

  4.   

    客户端执行了closesocket(),服务端怎么知道啊,谁给实例一下
      

  5.   

    quick(我追) ( )
    客户端执行了closesocket(),服务端怎么知道啊,谁给实例一下
    ------------------------------------------------------------
    是服务端从recv()的结果得到,SOCKET_ERROR.GetLastError()=10054。
    如果是网线断开,send()应该还是成功的,注意:此时,netstat -an命令看到的这条链路可能还是“建立”状态。但send()实际并未发出东东,你当然就不会收到回应了,然后,超时closesocket()。
      

  6.   

    使用select模型,每过一定的时间检测连接,
      

  7.   

    谢谢 jianxin7248(Garfield) 我想到了select,但是select没有那个返回值可以表示是网络断开了啊
      

  8.   

    用select()如何判断网络断开啊
      

  9.   

    发送数据时候判断返回值是否是SOCKET_ERROR啊
      

  10.   

    打错了,应该是检查是否为SOCKET_INVALID
      

  11.   

    SOCKET_INVALID 系统根本不认识,编译出错,msdn哪个地方注明select()返回SOCKET_INVALID代表断线
      

  12.   

    1.c/s下,在CLIENT中如果用户退出了应用程序,SERVER中使用Select可得到对方socket 关闭消息
    2.物理连接断开,SERVER 想知道CLIENT是否断开,使用所谓的心跳包可以实现