[英]What happens if udpclient lost packets in C#
我现在正在研究计算机网络。 现在,我知道TCP和UDP之间的最大区别是UDP在通信时会丢失其数据包。 我想知道C#如何应对这种迷失。 例如,一个主机将"ABCD\\n"
字符串发送给另一台主机。 如果有数据包丢失,接收主机是否会抛出任何exception
或只是出现"AB\\n"
? (添加),我想知道某种方法来强制udpclient丢失其数据包。 然后我可以做实验。
C#不在乎-实际上,它甚至都不知道包丢失了。 您的代码/逻辑对该丢失的数据包可能有问题,也可能没有问题。 这完全取决于您编码的逻辑,并且与基础编程语言/运行时系统无关。
我还认为您正在对此过度考虑/过于复杂:丢失一个数据包===不发送一个数据包...
您应该自己实现CRC机制(与语言无关)
例如:
host1希望将udp数据报发送到host2。
这是一个C#crc类示例:
public static class Crc16
{
const ushort polynomial = 0xA001;
static readonly ushort[] table = new ushort[256];
public static ushort ComputeChecksum(byte[] bytes)
{
ushort crc = 0;
for (int i = 0; i < bytes.Length; ++i)
{
byte index = (byte)(crc ^ bytes[i]);
crc = (ushort)((crc >> 8) ^ table[index]);
}
return crc;
}
static Crc16()
{
ushort value;
ushort temp;
for (ushort i = 0; i < table.Length; ++i)
{
value = 0;
temp = i;
for (byte j = 0; j < 8; ++j)
{
if (((value ^ temp) & 0x0001) != 0)
{
value = (ushort)((value >> 1) ^ polynomial);
}
else
{
value >>= 1;
}
temp >>= 1;
}
table[i] = value;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.