簡體   English   中英

套接字編程中讀取的用法

[英]Usage of read in socket programming

在使用C編程中讀取的阻塞功能時,有什么方法可以區分有效載荷與不同數據包嗎? 我正在從TCP客戶端以數據包的形式發送每個消息,當我在TCP服務器中讀取(使用讀取功能)它時,我將所有消息都放在緩沖區中,而兩者之間沒有任何分隔符。

您將必須在應用程序層上自己實現它。

一種方法是例如Type-Length-Value。

您發送的每條消息都具有以下結構:

1 byte | 2 byte | length bytes
type    length   value

更多細節在這里

注意, read不能完全讀取指定的字節數,它可以讀取的字節數更少-因此您需要檢查其返回值。 例如看這個

您可能還需要了解一些二進制協議的陷阱。

另外,建議您對網絡編程進行一些背景閱讀,例如, 在此處 -請參閱第7章。

TCP是面向流的,這意味着沒有可以將它們分開的包,因此您必須實現自己的協議,例如,可以在發送每個包之前發送4字節的報頭數據,並在接收器中告訴接收器下一個包的大小。接收端,您應該始終讀取4字節的標頭(標識下一個數據包的大小),並使用標頭中指定的大小進行阻塞讀取。

另一種選擇是使用固定大小的數據包,因此每次您都必須從TCP緩沖區讀取固定大小的數據包時。

不同於TCP,UDP可以根據需要面向數據包。 在UDP數據包中,接收到的數據包的大小與已發送的大小相同,並且不會發生其他任何緩沖或串聯,但是它不可靠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM