因为要写一个网络程序要用到UDP协议,UDP这东西比较麻烦,又不像TCP一样提供可靠的连接,发送接收的超时实在不好设计,最后只要用Timer来检测有没有想要的数据包-_#,不过这不是这次的重点,重点是怎么建立一种高效的UDP机制来实时接收服务器发送过来的数据包.
CodeProject上有个例子是开个线程去同步接收,这样倒是可以满足我的程序需求,不过实际中遇到几个问题:
1.程序开销大,内存狂飙,接一次数据就要重新开一次线程
2.由于主界面和底层是完全隔离只是通过中间的接口来通讯,导致线程总是不能正常的结束,程序结束后还有一个进程在那里不知道干什么.
于是翻阅MSDN,查找自己以前写的代码,最后还是决定用异步来接收,MSDN上UDP异步的例子不太好,有点敷衍的意思,用异步很好的解决了以上的问题,高效完成效率,代码如下:
复制代码 代码如下:
UdpClient qq_client; //Udp客户端
qq_client = new UdpClient();
IPEndPoint remoteQQEP = new IPEndPoint(remotehost, remoteport);
qq_client.Connect(remoteQQEP);
AsyncCallback GetRecvBuffer = new AsyncCallback(ReceiveCallback);
qq_client.BeginReceive(GetRecvBuffer, null);
这里用一个GetRecvBuffer的回掉来实现异步
private void ReceiveCallback(IAsyncResult ar)
{
try
{
lock (this)
{
byte[] recvbytes = qq_client.EndReceive(ar, ref remoteQQEP);
//QQFunction.DebugDump(recvbytes);
if (recvbytes[0] != QQDef.QQ_IM_HEAD && recvbytes[0] != 0x03)
{
//非QQ数据包
return;
}
switch (Pop16(recvbytes, 3))
{
case QQDef.QQ_REQUEST_TOKEN:
DoGetToken(recvbytes);
break;
case QQDef.QQ_REQUEST_LOGIN:
DoGetLogin(recvbytes);
break;
case QQDef.QQ_GET_ONLINE_FRIEND:
DoGetOnline(recvbytes);
break;
case QQDef.QQ_KEEP_ALIVE:
CheckAlive(recvbytes);
break;
case QQDef.QQ_SEND_IM_MSG:
// Do SomeThing
break;
case QQDef.QQ_RECV_IM_MSG:
DoRecvMsg(recvbytes);
break;
default:
QQFunction.DebugDump("UnKnow Command");
QQFunction.DebugDump(recvbytes);
break;
}
}
lock (this)
{
AsyncCallback GetRecvBuffer = new AsyncCallback(ReceiveCallback);
qq_client.BeginReceive(GetRecvBuffer, null);
}
}
catch
{
}
}
代码是不是很简单?功能是不是很强大?
相关推荐:
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
企业营销:如何在竞争激烈的市场中脱颖而出,美装网站Seo优化
什么是seo模型,seo模块总结 ,ai技术授课
ChatGPT4账号共享-让AI助力你的学习与工作,轻松提升效率,ai巨无霸
ChatGPT5.0为什么一直没出来?背后的技术与战略,元宵节ai趣赏月
用AI写的文章算原创吗?真相揭示,带你深度思考!
主流seo是什么,seo是什么推广网站 ,AI心理师
ChatGPT为什么访问不了?全面解析及解决方案,ai首页设计
AI自动帮写,轻松应对内容创作挑战,赋能写作新未来,嘿科技ai
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
用AI生成的文章算原创吗?深度解析AI写作背后的秘密
AI文章精简-高效提炼与优化你的内容创作,ai quid
SEO更好,让你的网站从此脱颖而出,渝中的知名网站建设
SEO才能:提升网站排名,突破网络营销的核心竞争力,南宁本地seo营销公司
SEO站内优化:提升网站排名的核心策略,厦门市网站优化企业
SEO针对中小企业的增长潜力:如何通过精准优化抢占市场先机,网络推广和营销就选y火10星评价
什么是seo的豆子,何为seo ,ai圆复制
SEO能给企业带来什么价值,seo的影响 ,ai蓝衣美女
GPT优化:让你的工作与生活更高效、更智能,Ai__79
怎么看文章是不是AI生成的?揭秘背后的玄机与技巧
SEO做网站点击:提升网站流量的关键策略,国内ai写作论文
揭开“好的AI软件”背后的秘密:让生活和工作更智能的利器
360排名优化价格:打造高效网络营销的制胜法宝,ai换脸刘浩存自wei
优化标题:如何让你的文章更具吸引力与点击力,整站网站优化解决方案
AI免费工具:提升效率与创意的秘密武器
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
SEO详解:如何优化你的网站提升排名,获得更多流量,伊春湖南网站优化推广
SEO领先-如何借助SEO技术让您的网站脱颖而出,seo是黑客吗
二级泛站群,zblog二级泛站群 ,李宗盛ai
一键创作,助你轻松实现创意梦想,最低价刷粉网站推广
优化工具:提升工作效率的秘密武器,网站模板的优化策略是什么
SEO要素:优化网站排名的关键因素全解析,棒球大联盟营销推广文案
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
什么是“神马关键词”?如何用它提升你的网络营销效果?,新闻发布网站怎么做推广
SEO出超:如何通过精准优化实现网站流量大爆发,营销推广方式联系f火15星
AI免费生成:开启智能创作新纪元,助力你的创意无限可能
seo进阶买什么书推广,seo的推广技巧 ,菩萨壁纸ai
ChatGPT遇到问题?如何解决“您的应用遇到问题,无法正常启动”困境?,ai下载增强版
优化服务网-提升客户体验,打造全方位智慧服务平台,东莞网站建设员招聘信息
SEO手段:提升网站流量的制胜法宝,idc网站怎么推广
ChatGPT昨晚突然不能使用,背后真相令人意想不到!,edga ai
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
什么是SEO可以自学吗,seo零基础可以自学吗 ,ai1紫
中文润色:提升表达的艺术,打造无懈可击的语言魅力,广告营销推广新思路论文
为什么越来越多的人选择在知乎发布文章?这里面的机会你可能还没发现!,潍坊关键词排名提升
SEO但是,这些常见误区你真的知道吗?,凤岗网站建设开发
SEO分类中内部优化的有:让你的网站脱颖而出!,by ai
seo独立站是什么,独立站推广是什么 ,ai曲线笔刷扩展
SEO抢权:如何在竞争激烈的市场中占得先机,正规网站建设口碑好
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班