C# UDP通信 操作大数据时 减少丢包的方法 20
SocketudpServer;IPEndPointserverIP=newIPEndPoint(IPAddress.Parse(xxx.xx.x.xxx),9199);...
Socket udpServer;
IPEndPoint serverIP=new IPEndPoint(IPAddress.Parse(xxx.xx.x.xxx),9199);
udpServer.Bind(serverIP);
EndPoint.Remote=(EndPoint)serverIP
new Thread(()=>
{
while(true)
{
byte[] data=new byte[102400];定义一个数据缓存区
try
{
length=udpServer.ReceiveFrom(data, ref Remote); 从远端接收到的数据长度
if(length<=0)
break;
string str1=Encoding.GetEncoding("GBK").GetString(data,0,length);将接收到数据转换为字符串
Invoke(new ThreadStart(delegate()
{
this.textBox1.ApprendText(str1+Environment.NewLine);将字符串显示到文本框中
this.textBox1.ScollToCaret();
}))
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
}).Start();
以上是自己写的一段UDP接收的程序,开启一个线程进行数据接收,当数据量小时,没有丢包现象,但是当数据量大时,会出现丢包,请各位帮忙想想办法 !谢谢了 展开
IPEndPoint serverIP=new IPEndPoint(IPAddress.Parse(xxx.xx.x.xxx),9199);
udpServer.Bind(serverIP);
EndPoint.Remote=(EndPoint)serverIP
new Thread(()=>
{
while(true)
{
byte[] data=new byte[102400];定义一个数据缓存区
try
{
length=udpServer.ReceiveFrom(data, ref Remote); 从远端接收到的数据长度
if(length<=0)
break;
string str1=Encoding.GetEncoding("GBK").GetString(data,0,length);将接收到数据转换为字符串
Invoke(new ThreadStart(delegate()
{
this.textBox1.ApprendText(str1+Environment.NewLine);将字符串显示到文本框中
this.textBox1.ScollToCaret();
}))
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
}).Start();
以上是自己写的一段UDP接收的程序,开启一个线程进行数据接收,当数据量小时,没有丢包现象,但是当数据量大时,会出现丢包,请各位帮忙想想办法 !谢谢了 展开
1个回答
展开全部
包多的时候,要能保证接收端在收到数据后能立刻再次回到监听状态,以防在处理这个包的消息的时候有新的包发过来却因为接收端还未回到监听状态而造成丢包。研究一下委托回调吧。
另一个是要注意每个包不要携带过长的数据量,可以拆分成若干小包后在每个包头前编号,接收端在收到后排序整理,发现哪个编号丢了返还给发送端要求冲发该吧。研究下消息队列吧。
另一个是要注意每个包不要携带过长的数据量,可以拆分成若干小包后在每个包头前编号,接收端在收到后排序整理,发现哪个编号丢了返还给发送端要求冲发该吧。研究下消息队列吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询