在TCP通讯过程中,有时在服务器发送数据给某个客户端时,重试3次,依然没有回复,则该连接被异常断开,但是不久之后还能收到该客户端的数据,然后windows会发送RST中断该连接。这种情况偶尔会出现。分析原因,可能是1.数据未能发出去,2.客户端未收到数据(公网网关丢失)。请问如何得知数据已从通过局域网网关发出去了呢?可以通过监控软件监控本机,发现数据重传和收到客户端数据的所有情况。如何监控该数据包从本机到局域网网关到公网网关的情况呢?

解决方案 »

  1.   

    如果连接异常断开了,就不会再收到数据,另外你的重试3次是间隔多少?你是不是用的INDY控件?
      

  2.   

    是Indy控件。
    异常断开了,控件当然是收不到数据了。但是windows还是收到了。
      

  3.   

    可以试下,在原客户端建个SERVER端
      

  4.   

    检查一下异常断开的原因,有时INDY报异常,但是没有真正断开,线程还在。
      

  5.   

    server端断开了,客户端没断开及时,只要你的端口是开着的,windows肯定是收到信息的
      

  6.   

    Socket断开往往只是一个"假象",Indy把Socket都封装了,更加看不到底层了;可以去看看WinSock2那些函数,例如setsockopt,可以设置在执行closesocket后,保留Socket一段时间,直到数据收发完毕.
      

  7.   

    最怕的是单片机的TCP/IP协议栈没有实现完整...那么,对于上位机来说就是一个噩梦
      

  8.   

    在TCP通讯过程中,有时在服务器发送数据给某个客户端时,重试3次,依然没有回复,则该连接被异常断开,但是不久之后还能收到该客户端的数据,然后windows会发送RST中断该连接。
    --------------------------
    用GETLASIT看有没有异常,
    不喜欢用INDY,绕来绕去的, 不如自己写SOCKET清爽 
      

  9.   

    Indy是阻塞式的,windows收到数据,但是达到indy想要的结果,所以indy不会有返回的。windows一向提昌非阻塞式,但需要线程和自己组合数据,而UNIX是阻塞式,开发简单。