Wie kann ich die Puffergröße für das darunterliegende Socket UDP einstellen? C #

Wie wir für den UDP-Empfang wissen, verwenden wir Socket.ReceiveFrom oder UdpClient.receive

Socket.ReceiveFrom akzeptiert ein Byte-Array von Ihnen, um die UdP-Daten einzugeben.

UdpClient.receive gibt direkt ein Byte-Array zurück, in dem sich die Daten befinden

Meine Frage ist, wie man die Puffergröße innerhalb des Sockels einstellt. Ich denke, das Betriebssystem unterhält einen eigenen Puffer für den Empfang von UDP-Daten, oder? Wenn beispielsweise ein udp-Paket an meinen Computer gesendet wird, legt das Betriebssystem es in einem Puffer ab und wartet auf Socket.ReceiveFrom oder UdpClient.receive, richtig?

Wie kann ich die Größe dieses internen Puffers ändern?

Ich habe versucht, Socket.ReceiveBuffSize, es hat überhaupt keine Wirkung für UDP, und es ist eindeutig gesagt, dass es für TCP-Fenster ist. Außerdem habe ich viele Experimente durchgeführt, die beweisen, dass Socket.ReceiveBufferSize NICHT für UDP ist.

Kann jemand einige Einblicke für UDP-internen Puffer teilen?

Vielen Dank

Ich habe hier einige Posts gesehen, z.

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

Dave sagte, dass Socket.ReceiveBufferSize den internen Puffer für UDP festlegen kann. Ich stimme dir nicht zu.

Das Experiment, das ich gemacht habe, ist wie folgt:

27 Hosts senden gleichzeitig (zumindest fast) ein 10-KB-UDP-Paket an mich in einem LAN. Ich habe eine while-Schleife, um jedes Paket zu behandeln. Für jedes Paket erstelle ich einen Thread und bearbeite ihn. Ich habe UdpClient oder Socket verwendet, um die Pakete zu empfangen.

Ich habe ungefähr 50% der Pakete verloren. Ich denke, es ist ein Ausbruch des UDP-Sendens und ich kann nicht alle rechtzeitig behandeln.

Aus diesem Grund möchte ich die Puffergröße für UDP erhöhen. Sagen wir, wenn ich die Puffergröße auf 1 MB ändere, können 27 * 10 KB = 270 KB Daten in den Puffer aufgenommen werden, oder?

Ich habe versucht, Socket.ReceiveBufferSize auf viele, viele Werte zu ändern, und es hat einfach überhaupt keine Auswirkungen.

Kann jemand helfen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage