读书人

C# UDP结婚搜丢包有关问题

发布时间: 2012-05-30 20:20:04 作者: rapoo

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
{
//添加测试相关代码
}

[解决办法]
解决不了。

帮忙顶顶···········
[解决办法]
帮顶 等高人 接分
[解决办法]
udp丢包50%也是很正常的,这根本就不是可靠通信。想要可靠(但也不是100%不丢包),应该使用tcp。
[解决办法]
赶紧换成Tcp,udp不可靠协议经常丢。
[解决办法]
Friendly Up!
[解决办法]
做到谁发送谁检查是否收到包即可...当A发一个包后..间隔1秒或长点时间还没收到回包时,视为丢包.重新发送请求.
[解决办法]
帮顶,我最近也在搞 UDP采集实时数据的东西,现在数据量不大还比较稳定,同担心点数增加很大后会出现问题啊
[解决办法]
udp不丢包,就不是udp。
[解决办法]
dup丢包才是正常的,不丢才不正常。
一定要做好校验,丢了以后再发送。
可以考虑使用rtp。
rtp:一种基于udp的协议。做了校验、重发等动作。
比udp复杂,需要花费精力去研究的。
[解决办法]
减少丢包率
1、每个UDP包的体积小,小于460个字节,减少分片,从一定程度上可以减少丢包
2、提高接受缓冲区的大小,把接受缓冲设为10K以上
3、采用一问一答,每个包编号,自己采用一套机制,但是这样就太复杂。


[解决办法]
tcp异步传输?话说tcp自称可靠,我怎么试验得不稳定啊..。
[解决办法]

探讨
若丢包不怎么频繁,也能接受,比如说30分 中 丢包1次 2 次之类的。

[解决办法]
环境允许,项目允许。
强烈建议使用TCP

------解决方案--------------------


应该自己设计应用层协议来保证可靠的udp通信
[解决办法]
udp有这么不好啊,以后要注意了

读书人网 >C#

热点推荐