如题,服务端、客户端我都是通过socket实现的,通过抓包软件查看,每个tcp数据包都是要重发一次,这是什么问题呢?
查看资料得知,可能是tcp中的重传计时器的问题,该如何解决呢?
附图,数据包情况

解决方案 »

  1.   

    这个tcp数据包的发送不是直接控制的,我是通过
    if(send(m_Socket, sBuffer, nLen, 0) == nLen)直接发送的一个819200大小的sBuffer实现的...
      

  2.   

    链路太堵了,tcp通信的ACK数据包未及时收到原因,降低I\O,可以解决这个问题。
      

  3.   

    你的抓包工具确实挺不错的。
    我看你是在本机上自己发自己收。我分析的是这样的:当接收缓冲区阻塞的时候,你发送的数据包发送给接收端,此时,接收端不能接收,也就是不能返回ACK,它也不能返回RST,所以就会不处理,这时候超时时间到,发送端以为接收端没收到,就又发了一个SYN,这样就重发了。我建议的是,提高接收线程的优先级,或者说降低发送线程的优先级。让接收端缓冲队列时刻保持能接收的状态。
      

  4.   

    自己程序逻辑的问题,怪到TCP的头上了。
      

  5.   

    应该是代码问题,TCP是流的。
      

  6.   

    是不是目标端回发的太狠了,百兆网卡,12.5M/S,看一下你的对端每秒发来的数据量是不是远远大于12.5M了,是的话必然会出现重传。 再者就是把你的接受缓冲区弄大一些。