udp服务端的效率

myminimouse 2011-04-11 01:17:00
int iReceive;Socket udplocalSocket;
byte[] btData = new byte[1024];

IPEndPoint ipLocalEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), port1);
udplocalSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
udplocalSocket.Bind(ipLocalEndPoint);

while (true)
{
btData = new byte[1024];
IPEndPoint ipRemoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
EndPoint remoteEndPoint = (EndPoint)(ipRemoteEndPoint);

try
{
iReceive =udplocalSocket.ReceiveFrom(btData, ref remoteEndPoint);

}
catch (SocketException ex)
{
continue;
}

if(btData.Length>0)
{
byte[] temp = DllFun.TrimByte00(btData);

udpclassobject m_udpclassobject = new udpclassobject();
m_udpclassobject.remoteEndPoint = remoteEndPoint;
m_udpclassobject.temp = temp;
ThreadPool.UnsafeQueueUserWorkItem(new WaitCallback(UpdataHandler1.UpDataHandler), m_udpclassobject);
}
Thread.Sleep(1);
}

这种是不是效率很低,有2000多个客户端同时发送数据丢包特别严重,还不确定是网络还是代码问题,找时间抓包看看。
希望各位先帮忙看下代码。如果确实是这样效率不高的话,麻烦大家给个高效的办法或者代码,谢谢
...全文
58 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
myminimouse 2011-04-26
  • 打赏
  • 举报
回复
谢谢楼上二位

咋没人回呢,没人研究udp的东东吗
isjoe 2011-04-19
  • 打赏
  • 举报
回复
WCF的,悲哀啊我还没有写过一个wcf的东东呢,一部分代码我看不懂,很遗憾

首先如果应用比较复杂的地方不推荐使用线程池,线程池是轻量级别,线程池中线程运行级别很低的,
复杂应用最好自己编写多线程,自己控制它。
还有Thread.Sleep(1);1毫秒无意义啊
myminimouse 2011-04-19
  • 打赏
  • 举报
回复
居然没人回,我顶

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧