簡體   English   中英

如何設置底層Socket UDP的緩沖區大小?

[英]How can I set the buffer size for the underneath Socket UDP?

眾所周知,對於UDP接收,我們使用Socket.ReceiveFrom或UdpClient.receive

Socket.ReceiveFrom接受來自您的字節數組以放入udp數據。

UdpClient.receive直接返回一個字節數組,其中數據是

我的問題是如何在Socket中設置緩沖區大小。 我認為操作系統會維護自己的緩沖區來接收UDP數據,對嗎? 例如,如果將udp數據包發送到我的機器,則操作系統會將其放入緩沖區,然后等待我們到達Socket.ReceiveFrom或UdpClient.receive,對嗎?

如何更改該內部緩沖區的大小?

我已經嘗試過Socket.ReceiveBuffSize,它對UDP完全沒有影響,並且它清楚地說這是對TCP窗口的。 我也做了很多實驗,證明Socket.ReceiveBufferSize不是用於UDP的。

誰能分享一些有關UDP內部緩沖區的見識?

我在這里看到了一些帖子,例如

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a

戴夫說Socket.ReceiveBufferSize可以為UDP設置內部緩沖區。 我不同意。

我做的實驗是這樣的:

27個主機同時(至少幾乎同時)在LAN內向我發送10KB udp數據包。 我有一個while循環來處理每個數據包。 對於每個數據包,我都會創建一個處理它的線程。 我使用UdpClient或Socket接收數據包。

我丟失了大約50%的數據包。 我認為這是UDP發送的突發事件,我無法及時處理所有這些。

這就是為什么我要增加UDP的緩沖區大小的原因。 說,如果我將緩沖區大小更改為1MB,那么緩沖區中可以接受27 * 10KB = 270KB的數據,對嗎?

我嘗試將Socket.ReceiveBufferSize更改為許多值,但它根本沒有效果。

有人可以幫忙嗎?

我偶爾會丟棄數據包,並且通過增加緩沖區獲得了成功。

我使用了UdpClient,並且在它的套接字上設置了比默認值大的值(8192字節)。 這為我解決了問題。

在我的場景中,可以清楚地看到大小越小,墨滴越多,則墨滴越大,墨滴越少。 我終於為我的應用程序選擇了2 ^ 18的值。

暫無
暫無

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

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