簡體   English   中英

Java:為什么DatagramSocket的`receive`方法會截斷消息?

[英]Java: why does DatagramSocket's `receive` method truncate messages?

來自C socket() / recv()背景,Java DatagramSocket.receive API似乎有點奇怪。 為什么強制程序員為傳入數據分配足夠大的DatagramPacket

這個問題是基於一個錯誤的前提。 在C中, recv系統調用的簽名是:

ssize_t recv(int s, void *buf, size_t len, int flags);

請注意,您將指針傳遞給緩沖區,以及該緩沖區的長度。 然后手動輸入說:

如果消息太長而無法容納在提供的緩沖區中,則可能會丟棄多余的字節,具體取決於接收消息的套接字類型。

換句話說,C API期望調用者分配一個“足夠大”的緩沖區,並且可能截斷更長的消息......就像Java那樣。

暫無
暫無

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

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