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

IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, );
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, );
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接收消息时的不同写法的更多相关文章

  1. 【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数

    (Azure Service Bus服务总线的两大类消息处理方式: 队列Queue和主题Topic) 问题描述 使用Service Bus作为企业消息代理,当有大量的数据堆积再Queue或Topic中 ...

  2. springboot整合mq接收消息队列

    继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...

  3. 【Spring】使用Spring和AMQP发送接收消息(下)

    上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供 ...

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

    一.环境准备 1,官网http://activemq.apache.org/下载最新版本的ActiveMQ,并解压 2,打开对应的目录,在Mac环境下,一般可以运行命令: cd /Users/***/ ...

  5. Kafka学习笔记(7)----Kafka使用Cosumer接收消息

    1. 什么是KafkaConsumer? 应用程序使用KafkaConsul'le 「向Kafka 订阅主题,并从订阅的主题上接收消息.Kafka的消息读取不同于从其他消息系统读取数据,它涉及了一些独 ...

  6. 【原创】JMS生产者和消费者【PTP异步接收消息】

    PTP模式下,异步接收消息需要定义一个MessageListener来监听,当生产者有消息要发送时会主动通知Listener去处理该消息,会调用监听的onMessage方法去处理. 首先看生产者(和同 ...

  7. RabbitMQ 入门 (Go) - 2. 发布和接收消息

    本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...

  8. XMPP客户端开发(2)--发送接收消息

    客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...

  9. [转] C#中发送消息给指定的窗口,以及接收消息

    原文C#中发送消息给指定的窗口,以及接收消息 public class Note { //声明 API 函数 [DllImport("User32.dll", EntryPoint ...

随机推荐

  1. Xcode7 *** does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)

    *** does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE ...

  2. LeetCode——Letter Combinations of a Phone Number

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  3. 【转载】推荐5款超实用的.NET性能分析工具

    来源:http://www.csdn.net/article/2012-11-23/2812174-5-Good-and-useful-.NET-Profilers 虽然.NET框架号称永远不会发生内 ...

  4. js 对多sheet Excel赋值操作

    function ExpExcel(){ var tempStr = ""; var filePath ="" var excelname=ReportFile ...

  5. 工具网站gallery

    jQuery各个版本齐全的api 在线编辑器codepen

  6. PHP 知识结构

  7. np2016课程总结

    林牧 SA16222166 课程目标 课程安排 A1a A2 A3 项目集成 环境搭建 其他方面的收获 本课心得 课程目标 通过实现一个医学辅助诊断的专家系统原型,具体为实现对血常规检测报告OCR识别 ...

  8. 【crawler】log4j:WARN No appenders could be found for logger (dao.hsqlmanager).

    This Short introduction to log4j guide is a little bit old but still valid. That guide will give you ...

  9. windows使用python3.4生成二维码

    1.首先下载qrcode库 使用pip命令: pip install qrcode python3.x以上的版本默认是安装好pip的,如果出现无法找到pip指令的信息的话,则需要首先安装pip. 2. ...

  10. NSURLErrorDomain -999 "Canceled" 错误探究

    完整错误描述为 Error Domain=NSURLErrorDomain Code=-999 "Canceled/已取消" 这个错误一般用来描述某个网络请求在还未被发出时就被意外 ...