我对TCP只有很基本的知识,知道接收端收到一个包后要向发送端发一个ack确认指令,我的程序用recv时出错,用sniffer监视了一下,受到一个数据包后,发现确认ack的指令没了(丢包?),然后,发送端就不断的重发刚才发过的包,那位能指点一下,如果这种情况发生了,用windows socket如何能判断是重发并恢复session。另外问一下,如果recv的系统缓冲过小,是不是很容易发生这种情况(系统来不及发ack)
调试欢乐多
winsock 建筑于TCP协议的应用层和网络层之间的缓冲小的话,满了以后,发送方会发送不成功,需要重发
send的返回值就是成功发送的字节数,所以要根据返回值来判断是否需要重发
2、为什么发ack,怎么发,ack是什么(如ack=1或ack='1')?
实在不明白楼主说什么:)
winsock已经实现TCP了
Ack是TCP协议本身的东西,而Socket在TCP之上
对Socket来说,丢失一个Ack会自动重发,如果一直连不上,在Socket里面只会出现超时错