C# UdpClient使用Receive和BeginReceive接收消息时的不同写法

使用Receive(同步阻塞方式), 注意使用同步方法时,需要使用线程来开始方法,不然会使UI界面卡死

            IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 5858);
            UdpClient udpClient = new UdpClient(RemoteIpEndPoint);
            while (true) //由于Receive方法是阻塞方法,一个Receive操作完了后才能继续往下执行,所以能在这里使用死循环
            {
                Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
                string msg = Encoding.UTF8.GetString(receiveBytes);
            }

使用BeginReceive(异步)

               private static void InitializeUdpClient()
              {                               IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 5858);
                UdpClient udpClient = new UdpClient(RemoteIpEndPoint);
                //如果这里写while(true) 则会不停挂起异步接收操作,直到占满缓冲区间或队列。会报“由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作”的错
                UdpState s = new UdpState(udpClient, RemoteIpEndPoint);
                udpClient.BeginReceive(EndReceive, s);
              }

        private static void EndReceive(IAsyncResult ar)
        {
            try
            {
                UdpState s = ar.AsyncState as UdpState;
                if (s != null)
                {
                    UdpClient udpClient = s.UdpClient;

                    IPEndPoint ip = s.IP;
                    Byte[] receiveBytes = udpClient.EndReceive(ar, ref ip);
                    string msg = Encoding.UTF8.GetString(receiveBytes);

                    udpClient.BeginReceive(EndReceive, s);//在这里重新开始一个异步接收,用于处理下一个网络请求
                }
            }
            catch (Exception ex)
            {
                //处理异常
            }
        }

    public class UdpState
    {
        private UdpClient udpclient = null;

        public UdpClient UdpClient
        {
            get { return udpclient; }
        }

        private IPEndPoint ip;

        public IPEndPoint IP
        {
            get { return ip; }
        }

        public UdpState(UdpClient udpclient, IPEndPoint ip)
        {
            this.udpclient = udpclient;
            this.ip = ip;
        }
    }

C# UdpClient使用Receive和BeginReceive接收消息时的不同写法

时间: 2024-10-11 03:45:31

C# UdpClient使用Receive和BeginReceive接收消息时的不同写法的相关文章

ActiveMQ实例1--简单的发送和接收消息

一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/Downloads/apache-activemq-***/bin/macosx ./activemq start 3,启动成功后,登录http://localhose:8161/admin/,登陆账号和密码都为admin,创建一个queue名为jyQueue. 二.创建Eclipse项目 1,新建

ActiveMQ 部署及发送接收消息

一.           下载 下载地址:http://activemq.apache.org/ 我这里使用的版本为当前最新5.8.0. 下载版本有Windows和Linux两个版本,且都分为32位和64位.根据自己需要选择下载. 二.           安装 我这里下载的为windows的32位版本(apache-activemq-5.8.0-bin.zip),下载后直接解压到需要安装的目录或在直接解压到当前目录也可,解压完安装也完成. 解压后目录如上图,里面包含了示例和文档,及所有的jar

微信公众平台-接收消息与发送被动消息

接收消息代码如下(包含回复消息调用): /// <summary> /// 接收用户消息 /// iftrue /// 2014-07-08 /// </summary> public class Receive { public delegate Models.Send_Msg delegate_SendMsg(string msgType); public delegate void delegate_RececiveHandler(Models.Receive_Msg mod

SpringFramework4系列之SpringJMS:(四)异步接收消息- 1.基本介绍

以往我们监听消息队列的时候,通常都是用EJB的MDB(Message-driven bean). 这需要EJB容器的支持. springframework4 使得 使用常规的POJO 就可以作为监听器 接收消息队列的信息了. 使用MDP 接收消息 Message-Driven Pojos 其实就是一种普通的POJO,只是实现了 MessageListener 接口. import javax.jms.JMSException; import javax.jms.Message; import j

【iOS开发每日小笔记(四)】iOS 7中如何除去UIAlertView 规避delegate对象销毁后接收消息的crash

这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.该分类的文章,内容涉及的知识点可能是很简单的.或是用很短代码片段就能实现的,但在我看来它们可能会给用户体验.代码效率得到一些提升,或是之前自己没有接触过的技术,很开心的学到了,放在这里得瑟一下.其实,90%的作用是帮助自己回顾.记忆.复习.如果看官觉得太easy,太碎片,则可以有两个选择:1,移步[iOS探究]分类,对那里的文章进行斧正:2,在本文的评论

微信公众平台开发学习系列(二):微信公众平台接收消息与发送消息

本篇主要介绍如何使用senparc来处理微信公众平台的接收消息与发送消息. 首先微信端会将用户的发送的信息以post请求发送到填写的url上,服务端代码如下: 1 [HttpPost] 2 public ActionResult Get(PostModel postModel) 3 { 4 var messageHandler = new CustomMessageHandler(Request.InputStream, postModel); 5 6 messageHandler.Execut

微信公众号开发教程[003]-消息管理-接收消息

当微信用户向公众号发送消息时,微信服务器会向公众号配置的服务器URL地址发送请求,并将相关内容包装成一定格式的xml发送到这个服务器;响应时,这个服务器只要回复特定格式的xml字符串给微信服务器,微信服务器即可向微信用户的客户端转发这条回复消息.(假设公众号开发模式已开启,以后的教程,如果没有特别说明,都是如此).如下图: 例如,文本消息的xml结构如下: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> &

rabbitmq 学习-9- RpcClient发送消息和同步接收消息原理

rabbitmq 学习-9- RpcClient发送消息和同步接收消息原理

socket接收消息拼接

TCP服务器发送消息时,可能把多个消息放在一起一次性发到客户端,客户端在进行接收处理时,务必根据自己的消息类型进行消息拼接,拼接出完整的消息后才能发送到业务层处理