当前位置:  开发笔记 > 编程语言 > 正文

如何设置Socket UDP下面的缓冲区大小?C#

如何解决《如何设置SocketUDP下面的缓冲区大小?C#》经验,为你挑选了2个好方法。

正如我们所知道的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

Dave说Socket.ReceiveBufferSize可以为UDP设置内部缓冲区.我不同意.

我做的实验是这样的:

27台主机同时在局域网内向我发送一个10KB的udp数据包(至少差不多).我有一个while循环来处理每个数据包.对于每个数据包,我创建一个处理它的线程.我使用UdpClient或Socket来接收数据包.

我丢失了大约50%的数据包.我认为这是UDP发送的爆发,我无法及时处理所有这些.

这就是为什么我想增加UDP的缓冲区大小.比方说,如果我将缓冲区大小更改为1MB,那么缓冲区中可以接受27*10KB = 270KB的数据,对吗?

我尝试将Socket.ReceiveBufferSize更改为许多值,它根本就没有效果.

任何人都可以帮忙吗?



1> heavyd..:

我经常使用.NET UDPClient,并且我一直使用Socket.ReceiveBufferSize并且效果很好.在内部,它使用ReceiveBuffer参数调用Socket.SetSocketOption.以下是一些快速,简单的代码,您可以使用以下代码进行测试:

public static void Main(string[] args)
{
  IPEndPoint remoteEp = null;
  UdpClient client = new UdpClient(4242);
  client.Client.ReceiveBufferSize = 4096;

  Console.Write("Start sending data...");
  client.Receive(ref remoteEp);
  Console.WriteLine("Good");

  Thread.Sleep(5000);
  Console.WriteLine("Stop sending data!");
  Thread.Sleep(1500);

  int count = 0;
  while (true)
  {
    client.Receive(ref remoteEp);
    Console.WriteLine(string.Format("Count: {0}", ++count));
  }
}

尝试调整传递给ReceiveBufferSize的值.我测试了5秒内发送一个恒定的数据流,并获得了10个数据包.然后我增加了x4,下一次获得了38个数据包.

我会查看您网络中可能丢弃数据包的其他位置.特别是因为您在其他帖子中提到您正在发送10KB数据包.当将10KB发送到MTU大小的数据包时,它将被分段.如果系列中的任何1个数据包被丢弃,则整个数据包将被丢弃.



2> Vort3x..:

设置ReceiveBufferSize的问题是您需要在创建UdpClient对象后直接设置它.我在获取ReceiveBufferSize的值时没有反映出我的更改时遇到了同样的问题.

UdpClient client = new UdpClient()
//no code inbetween these two lines accessing client.
client.Client.ReceiveBufferSize = somevalue

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有