• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    高效的.Net UDP异步编程实现分析
    因为要写一个网络程序要用到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
    {
    }
    }

    代码是不是很简单?功能是不是很强大?
    您可能感兴趣的文章:
    • 深入分析C#异步编程详解
    • .NET中的异步编程-EAP/APM使用方法及案例介绍
    • .net4.5使用async和await异步编程实例
    上一篇:Win 2000下ASP.NET开发环境的配置
    下一篇:ASP.NET2.0缓存(Cache)技术深入理解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    高效的.Net UDP异步编程实现分析 高效,的,.Net,UDP,异步,编程,