我对TCP只有很基本的知识,知道接收端收到一个包后要向发送端发一个ack确认指令,我的程序用recv时出错,用sniffer监视了一下,受到一个数据包后,发现确认ack的指令没了(丢包?),然后,发送端就不断的重发刚才发过的包,那位能指点一下,如果这种情况发生了,用windows socket如何能判断是重发并恢复session。另外问一下,如果recv的系统缓冲过小,是不是很容易发生这种情况(系统来不及发ack)

解决方案 »

  1.   

    ack的情况不需要你管,winsock会自己做好的
    winsock 建筑于TCP协议的应用层和网络层之间的缓冲小的话,满了以后,发送方会发送不成功,需要重发
    send的返回值就是成功发送的字节数,所以要根据返回值来判断是否需要重发
      

  2.   

    1、TCP是连接的吧,怎么还有什么session?
    2、为什么发ack,怎么发,ack是什么(如ack=1或ack='1')?
    实在不明白楼主说什么:)
      

  3.   

    TCP的实现里面有ack帧
    winsock已经实现TCP了
      

  4.   

    我知道里面有帧号,我想问的是什么情况下winsock会发不出来ack或者是当ack丢包的时候如何判断是重发?
      

  5.   

    你说得已经不是你要处理得了,tcp已经处理了,不用关注的
      

  6.   

    TCP不需要自己做
    Ack是TCP协议本身的东西,而Socket在TCP之上
    对Socket来说,丢失一个Ack会自动重发,如果一直连不上,在Socket里面只会出现超时错
      

  7.   

    我以前做过一个用TCP传输的系统,也出现了,传的信息有内容丢失的现象,后来查出来问题是出在了我的传输的信息包的定义上,看看你的问题是不是也是这个 ?