读书人

tcp长连接中发送方会不会先告知对方

发布时间: 2013-04-22 16:01:35 作者: rapoo

tcp长连接中,发送方会不会先告知对方有多少段数据要传送,传完时是否有通知
此问题只考虑tcp以及下层,更高的应用层协议不考虑。
有个细节问题在书上没找到答案,tcp连接传送数据时,采用的是滑窗机制,为了让接收方有效接收和拼接数据,传送的数据是带序号的,接收方每收到一个序号的数据,就会回复值为该数据序号+1的值得ack给发送方,发送方就会继续发送接下来的数据,那么有以下问题:

发送方在发送前会不会告知接收方接下来会传送的数据一共分多少个序号?如果不告知的话那么就有一个问题,发送方发送完最后一个序号,接收方收到后发回最终序号+1的ack,接收方接到了后?会干嘛?不要说关闭连接,我设想的场景是双方建立了长连接,比如聊天软件这种情况,发送消息结束后连接时不关闭的,等待下一个传送。我估计要么发送方发送前会告知有多少个序号,要么就是发送方最后会告知接收方我发完了,但是无论哪一种书上都没描述,到底tcp连接里发送方是怎么向接收方表示“这段信息我已经全部发完了”这个细节的
[解决办法]

引用:
引用:长连接,如果是同步,那就是一直阻塞在recv了,所以一般发送数据时都会把数据大小放在数据前4个字节,接收方按照这个大小去接收数据。

那岂不是说,接收方收完了一段信息后,最后一个ack,发送方是不响应的,是吗

关于ack什么的,在写tcp的时候,我们不关心,ack是网络底层,我们用tcp已经是应用层了。
[解决办法]
细节就是三次握手定则,不过要你用Raw Socket才要考虑。。。。。。用winsocket的话就不用考虑的
一般可以写成
while(recv(。。。。)>0)
{
........
}
就得了。。。。。没数据传来返回长度为0就跳出了

读书人网 >VC/MFC

热点推荐