[英]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.