我不知道如何在发件人向我发送信息时告诉TCP。
例如,如果A需要向B发送200个字节,B将如何知道A完成发送,并且信息已准备好传输到应用层?
有FIN标志,但据我所知,它只是象征着你要关闭连接。
感谢。
答案 0 :(得分:2)
TCP没有义务在发送方完成连接数据发送时告知接收方。它不能,因为它不了解它正在传输的更高级协议数据。
然而,它会告诉您连接是否关闭(然后您将在网络跟踪中看到FIN,FIN-ACK)序列。从编程的角度来看,假设你正在使用C函数recv将在对等关闭连接时返回0。
答案 1 :(得分:0)
如果你在unix / linux上,select
和poll
可以发信号通知你另一端完成转移(做了一半/全部关闭)。如果您已阅读所有数据并希望从已关闭的连接中读取,则read
也会返回错误。
如果您在一个连接上进行多次传输,并希望发出“包”的结束信号,则必须将其构建到您的协议中。
答案 2 :(得分:0)
您可以定义一个协议,例如首先以指定的字节顺序发送一个4字节的int,该字节顺序指示消息体中将跟随多少字节。