2011-09-23 21 views
0

我不知道如何在TCP中告訴發件人完成向我發送信息的時間。如何知道何時完成接收TCP流?

例如,如果A需要向B發送200字節,B將如何知道A完成發送,並且信息已準備好傳送到應用層?

有FIN標誌,但據我所知,它只是在那裏象徵着你要關閉連接。

謝謝。

+0

您將其留給較高級別的協議。 –

回答

1

TCP沒有義務告訴接收方何時發送方在連接上發送數據。它不能,因爲它不瞭解它傳輸的更高級協議數據。

但它會告訴你連接是否在網絡跟蹤中關閉(然後你會看到一個FIN,FIN-ACK)序列。從編程的角度來看,假設您使用C,當對等關閉連接時,recv函數將返回0。

0

如果你在unix/linux上,selectpoll可以表示你的另一端完成了傳輸(做了半/全關)。如果您已閱讀所有數據並希望從關閉的連接中讀取數據,則read也將返回一個錯誤。

如果您在一個連接上執行多個傳輸並希望發出「包」的結束信號,則必須將其構建到協議中。

0

您可以定義一個協議,例如首先以指定的字節順序發送一個4字節的int值,該值指示郵件正文中的字節數。