Mono udpClient () не может отправить - неверная контрольная сумма - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть простое приложение UDP, написанное на C #, которое требуется для запуска под моно в Linux.Он отлично работает на моем персональном компьютере (Windows 10), но контрольная сумма на компьютере с Linux явно плохая.

Я попытался отключить контрольную сумму, но это просто не отправляет ее.

udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoChecksum, true);

Причина, по которой я знаю, что контрольная сумма неверна, в том, что tcpdump показывает мне:

192.168.88.98.5059 > 192.168.88.37.5059: [bad udp cksum 0x3354 -> 0x56e7!] UDP, length 354

Существует довольно много рабочего кода, кроме этого, например, TcpListener и т. Д., Это частьэто НЕ работает:

...
UdpClient udpClient = new UdpClient();
udpClient.ExclusiveAddressUse = false;
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
// udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoChecksum, true);
udpClient.Client.Bind(IpEndPoint);
udpClient.Send(rtnMessage, rtnMessage.Length, RemoteIpEndPoint);

Кроме того, с любой из этих опций, контрольной суммой или нет, я не получаю сообщение UDP на другой стороне.

...