Попробуйте сделать буфер отправки или получения вашего сокета (сервер или клиент) достаточно большим, чтобы вместить ожидаемый объем трафика. Вот пример кода C # с моего собственного сервера / клиента многоадресной рассылки UDP на стороне сервера, где dataSock
- это мой Socket
, связанный с группой многоадресной рассылки UDP:
dataSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, (NumberOfPackets * PacketSize) + SmallEpsilonForExtraHeadroom);
Также убедитесь, что на клиентской стороне установлено значение SocketOptionName.SendBuffer
, соответствующее размеру буфера, создаваемого вашим сервером.
Я бы также порекомендовал, если вы еще не знали, сделать размер вашего пакета меньше, чем MTU. По умолчанию для MTU установлено значение 1500 байт. (MTU - максимальный размер блока передачи)
Вы можете по-прежнему получать пропущенные пакеты, если вы также не снизите скорость отправки, чтобы ваши клиенты не отставали. Ваше сетевое оборудование, скорее всего, является , а не узким местом. См. Мой вопрос Требуется микросекундная задержка в приложении .NET для регулирования скорости многоадресной передачи UDP для ответа на эту проблему (использование Stopwatch
в цикле while для задержек порядка микросекунд).