У меня есть простое приложение 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 на другой стороне.