Como sabemos para UDP recibir, utilizamos Socket.ReceiveFrom o UdpClient.receive¿Cómo puedo configurar el tamaño del buffer para el Socket UDP inferior? C#
Socket.ReceiveFrom aceptar una matriz de bytes de usted para poner los datos en UDP.
UdpClient.receive regresa directamente un byte matriz donde los datos son
Mi pregunta es cómo configurar el tamaño del búfer dentro de Socket. Creo que el sistema operativo mantiene su propio buffer para recibir datos UDP, ¿verdad? por ejemplo, si se envía un paquete udp a mi máquina, el sistema operativo lo colocará en un buffer y nos esperará a Socket.ReceiveFrom o UdpClient.receive, ¿no?
¿Cómo puedo cambiar el tamaño de ese buffer interno?
He intentado con Socket.ReceiveBuffSize, no tiene ningún efecto para UDP, y claramente dice que es para ventana TCP. También he realizado muchos experimentos que prueban que Socket.ReceiveBufferSize NO es para UDP.
¿Alguien puede compartir algunas ideas para el búfer interno de UDP?
Gracias
que he visto algunos puestos aquí, por ejemplo,
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a
de Dave dijeron que Socket.ReceiveBufferSize puede establecer el buffer interno para UDP. Estoy en desacuerdo.
El experimento que hice es así:
27 hosts envían un paquete UDP 10KB a mí dentro de una LAN al mismo tiempo (al menos casi). Tengo un while-loop para manejar cada uno de los paquetes. Para cada paquete, creo un hilo y lo manejo. Usé UdpClient o Socket para recibir los paquetes.
Perdí aproximadamente el 50% de los paquetes. Creo que es una explosión del envío de UDP y no puedo manejarlos a tiempo.
Es por eso que quiero aumentar el tamaño del búfer para UDP. digamos, si cambio el tamaño del buffer a 1MB, entonces se pueden aceptar 27 * 10KB = 270KB de datos en el buffer, ¿verdad?
He intentado cambiar Socket.ReceiveBufferSize a muchos valores, y simplemente no tiene ningún efecto.
Cualquiera puede ayudar?
@heavyd: gracias por su respuesta. Mi código es muy similar al tuyo. pero si estás interesado, puedes hacer un experimento simple. tenemos dos clases separadas: Servidor y Cliente. en su Client.cs, simplemente use UdpClient para enviar 200 paquetes (10KB cada uno) a su puerto local 8888. (sea cual sea el puerto que desee) en su Server.cs, usted recibe constantemente como se muestra en su código por supuesto, por favor ejecute su servidor.cs primero. mi resultado es el 90% de los paquetes se pueden recibir. El punto es que el envío de UDP es una ráfaga que llegan demasiados paquetes y su servidor no puede manejar. y el buffer se desborda – Jack
Sí, y ¿está diciendo que ajustar ReceiveBufferSize de un valor, digamos '4096' a un valor más alto, decir' 4 * 4096' no hace nada? – heavyd
@heavyd, ¿puedo saber cuál es el límite superior para ReceiveBufferSize? – Jack