C# UDP结婚搜丢包问题
先说说 机器之间配置吧:
总共有个8个机器给 我发数据。给我指定的同一个端口发送数据。
其中1,2,3,4机基本上同时给我发送数据。
发送一帧数据大小大概为8k-9k之间。
wireshark抓包看 可以接收到数据。
当我们程序中却丢包。
我的程序大概设计思路这样。
Udp接受程序,先把接受的数据放到缓存里,然后隔1ms就往
应用传送。接着应用先把传送过来的数据放到自己缓存区里。
初始化操作如下:
IPAddress localIPAddress = IPAddress.Parse(localIP);
IPEndPoint localIPEndPoint = new IPEndPoint(localIPAddress, localPort);
udpReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udpReceiveSocket.Bind(localIPEndPoint);//绑定本机IP端口
receiveDataThread = new Thread(ReceiveData);
receiveDataThread.IsBackground = true;
receiveDataThread.Priority = ThreadPriority.AboveNormal;
receiveDataThread.Start();
然后接受进程
byte[] receiveBuff = new byte[this.receiveBufferSize]; //定义接收缓冲区
IPEndPoint sourceIPEndPoint= new IPEndPoint(IPAddress.Any, 0);
EndPoint sourceEndPoint = (EndPoint)sourceIPEndPoint;
Int32 dataLen = udpReceiveSocket.ReceiveFrom(receiveBuff, ref sourceEndPoint);
DateTime revDateTime = DateTime.Now;//记录接收到数据时的日期时间
if (dataLen > 0)
{
UdpReceiveDataClass udpRecvDataCls = new UdpReceiveDataClass();
udpRecvDataCls.SourceIP = ((IPEndPoint)sourceEndPoint).Address.ToString();
udpRecvDataCls.Port = ((IPEndPoint)sourceEndPoint).Port;
udpRecvDataCls.RecvTime = revDateTime;
udpRecvDataCls.RevDataBytes = new byte[dataLen];
Array.Copy(receiveBuff, udpRecvDataCls.RevDataBytes, dataLen);
lock (udpReceiveDataClassListLocker)
{
udpReceiveDataClassList.Add(udpRecvDataCls);
}
}
else
{
//添加测试相关代码
}