那位大哥有这方面的源码啊,简单的demo就行,我找了好多资料都没找到,我用的是阻塞式的,当socket的正常断开或意外断开,都可以通过消息响应及时的自动重连

解决方案 »

  1.   


    TCP还用整心跳?
    阻塞模式下, recv函数返回-1就说明网络断开了,然后就可以重连;非阻塞模式下,根据WSAGetLastError()的值来判断网络断开
      

  2.   


    有没有写过网络编程?断开后操作系统会告诉你,你查询套接字的状态会得到异常,或者当发现函数失败WSAGetLastError的时候也会得到内核的通知。
      

  3.   

    B/S编程和UDP编程时才用到心跳。比如定期向web服务器发一个request证明自己在线。http协议是请求一下就断开了,每次都要重新连接,重新请求,这种情况下才有必要用心跳机制。一般的TCP通信都是长连接,不可能频繁连接和断开。对于长期保持连接的情况,一旦断开,操作系统底层都会通知你,你需要解决的是如何获取到系统的通知。
      

  4.   

    // 发送回应消息
    int nSend = Send4IntMsg(sock, (char*)(LPCTSTR)strSendBuf, strSendBuf.GetLength(), errMsg);
    if (nSend < 0)   // 发送消息失败
    closesocket(sock);
    重新连接就可以了这个在一个线程里,循环检测就OK了!
      

  5.   

    异常断开,需要程序员自己处理,比如直接拔网线,或者突然断电等等,还有就是程序级别的服务端挂掉等,需要自己的逻辑处理,如心跳机制等,可自己实现,或者使用Windows或者Unix下的特殊API处理,如WSAIoctl
      

  6.   


    我写TCP编程也写了不少,断线重连也搞过,从来不用心跳,UDP和B/S编程才用到过
      

  7.   

    问个问题啊
    如果tcp连接建立好了,很长时间不发送数据,连接依然能保持
    如果这个时候把网线断开,过段时间再插上,这个时候那个连接还存在吗?还能继续通讯吗?
      

  8.   


    我记得貌似是不能的,你的SOCKET句柄被破坏了。