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;}}
转载于:https://www.cnblogs.com/xyz0835/p/3835667.html
C# UdpClient使用Receive和BeginReceive接收消息时的不同写法相关推荐
- OSE RTOS中APP进程接收消息机制
在OSE运行的APP进程均有一个PCB结构体,结构体中包含了指向该进程signal list的指针,是一个链表,实际上是指向链表的头指针与尾指针,头指针结构中包含指向下一个signal的next指针. ...
- sql server 服务器之间传递消息,SQL Server 2008 Service Broker教程 - 无法接收消息(transmission_status中的异常)...
我正在学习如何使用SQL Server 2008 R2的Service Broker.在完成单个数据库中的完成对话教程时.在第1课之后,我成功创建了消息类型,合同,队列和服务.在第2课之后,我可能已经 ...
- iOS 当APP接收到推送消息时,对推送消息进行处理
结合最近做的项目来总结一下,在我们接收到推送通知后我们将要怎么处理这条推送消息,也为以后再做相关推送的时候能够更快处理. 首先要说明两个概念:本地通知和远程推送.本地通知是由本地应用触发的,接收会比较 ...
- 微信公众号回复、接收消息中中文乱码问题的分析及解决
微信公众号回复.接收消息中文乱码问题的分析及解决 为了方便,我们把接收时用的编码记为A.把处理时用的编码记为B.把返回时用的编码记为C 文章目录 微信公众号回复.接收消息中文乱码问题的分析及解决 中文 ...
- Netty:实现同步发送并接收消息的一种方式
Netty创建通信服务时使用Nio异步通信, 配置代码(bootstrap.channel(NioSocketChannel.class);),要怎样实现这样一个同步发送消息并接收消息功能,虽然这样做 ...
- Scala Actor,receive不断接收消息,react复用线程,结合case class的actor,Future使用,使用Actor进行wordCount
Scala Actor 二. 什么是Scala Actor 1. 概念 Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制,Scala是运用消息(message)的发送.接 ...
- c#UDP发送接收消息
UDP作为一种简单的.面向数据报的无连接的协议,虽然提供的是不可靠的服务,但是从速度上.一对多传输方面比TCP有着很大的优势.本文主要讲解UDP信息的发送和接收. Demo界面图如下: 首先打开程序e ...
- Unity丛林战争学习01_TCP_异步接受连接和异步接收消息
1.服务器端 服务器端所要做的事: ①创建服务器端套接字(Socket) ②绑定套接字(Bind) ③监听连接(Listen) ④异步接受连接(BeginAccept) ⑤结束异步接受连接,返回客户端 ...
- Akka 接收消息超时的处理_Receive Timeout
2019独角兽企业重金招聘Python工程师标准>>> Akka 接收信息超时的处理_Receive Timeout The UntypedActorContext setRecei ...
最新文章
- 大家谈谈公司里的项目经理角色及职责都是干什么的?
- 使用 TiKV 构建分布式类 Redis 服务
- php读取html中元素属性,读写HTML元素的css 属性
- vue 模板字符串循环_使用React四年后转而使用Vue,是一种什么样的体验?
- 有多个路由器的子网的分配
- 使用Win Server 2012 R2的IIS创建FTP
- Bitmap对图像的处理
- python seo 外链_百度链接提交-主动推送程序Python版
- gridview的表头固定
- 程序员删库后发同学群问如何恢复,同学:跑路吧,记得跑快点
- 一文搞懂MySQL索引所有知识点(建议收藏)
- 配置git mergetool不产生*.orig文件
- 导弹防御系统java_导弹防御问题 动态规划 java
- Educational Codeforces Round 126 (Rated for Div. 2)(A-E)
- 阿里云合作伙伴查询合作流程
- openswan中的in_struct和out_struct函数
- 生产排程计划面临哪些问题?如何有效解决?
- Entity Linking with a Knowledge Base:Issues, Techniques, and Solutions笔记
- Renamer给文件名倒序
- Activiti工作流与业务整合实战