如何知道何时收到TCP流?

时间:2011-09-23 00:17:34

标签: networking tcp stream protocols

我不知道如何在发件人向我发送信息时告诉TCP。

例如,如果A需要向B发送200个字节,B将如何知道A完成发送,并且信息已准备好传输到应用层?

有FIN标志,但据我所知,它只是象征着你要关闭连接。

感谢。

3 个答案:

答案 0 :(得分:2)

TCP没有义务在发送方完成连接数据发送时告知接收方。它不能,因为它不了解它正在传输的更高级协议数据。

然而,它会告诉您连接是否关闭(然后您将在网络跟踪中看到FIN,FIN-ACK)序列。从编程的角度来看,假设你正在使用C函数recv将在对等关闭连接时返回0。

答案 1 :(得分:0)

如果你在unix / linux上,selectpoll可以发信号通知你另一端完成转移(做了一半/全部关闭)。如果您已阅读所有数据并希望从已关闭的连接中读取,则read也会返回错误。

如果您在一个连接上进行多次传输,并希望发出“包”的结束信号,则必须将其构建到您的协议中。

答案 2 :(得分:0)

您可以定义一个协议,例如首先以指定的字节顺序发送一个4字节的int,该字节顺序指示消息体中将跟随多少字节。