C# UDP丢包问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 07:25:27
//客户端部分代码
private UdpClient _udpCLient = null;
....
private void Form1_Load(object sender, EventArgs e)
{
省略TCP部分....
_udpCLient = new UdpClient(Properties.Settings.Default.LocalUDPPort);
_udpCLient.Ttl = 20;
_udpCLient.MulticastLoopback = true;

IPAddress ip = IPAddress.Parse(Properties.Settings.Default.MulticastGroup);
_udpCLient.JoinMulticastGroup(ip);

_udpCLient.BeginReceive(new AsyncCallback(WriteMessage), _udpCLient);
}
省略若干事件.....
void WriteMessage(IAsyncResult ar)
{
IPEndPoint ip = new IPEndPoint(IPAddress.Parse(Properties.Settings.Default.Server), Properties.Settings.Default.ServerUDPPort);
byte[] data = _udpCLient.EndReceive(ar, ref ip);
省略显示部分...
_udpCLient.BeginReceive(new As

缓冲字节不够长,建议加长缓冲并在循环结束时清空缓冲以及对接受字节末尾加校验字节,并加校验语句。

关键字:断点
在代码的可疑之处,设置多个断点
然后在运行调试代码的时候
一步一步的查看每条代码获取到的值
然后把这个值和预期值进行比较
每条代码获取到的值都是非常明显的
可以很清晰的看出问题所在
哪里丢包一下就能看出来
你试试吧

丢包问题你完全没必要考虑,那是底层做的事情,对你来说是透明的,即使丢包也会再此发包,不会对你上层代码有影响,也就是说你用C#的传输时候可以理解为正确且完整的传输,所以总结下就是你代码的问题

会不会是发送端丢掉了?可能是长时间不发包之后,ARP过时丢弃,再发包时需要先获取接收端的ARP,
而发的包因为没有ARP而丢弃了。