udp异步方式接收消息

news/2024/5/18 14:41:55 标签: udp, 异步 接收, C#

C#实现

//定义结构体 

public struct UdpState
    {
        public UdpClient u;
        public IPEndPoint e;
    }
    
    private UdpClient _client; //_client的初始化请参考其他资料
    
        IPEndPoint remoteEP = null;  //TODO

        public static bool messageReceived = false;

        //收到消息的回调方法
        public void ReceiveCallback(IAsyncResult ar)
        {
            if (ar.AsyncState != null)
            {
                UdpState udpState = (UdpState)ar.AsyncState;

                UdpClient u = udpState.u;
                IPEndPoint e = udpState.e;
                _recvBuffer = u.EndReceive(ar, ref e);
                remoteEP = e;
                messageReceived = true;
            }            
        }
        

//消息处理
        private void process()
        {
            UdpState s = new UdpState();
            s.e = remoteEP;
            s.u = _client;

            while (true)
            {
                try
                {                    
                    //_recvBuffer = _client.Receive(ref remoteEP); //同步阻塞方式接收消息
                    
                    //以下是异步方式
                    messageReceived = false;                    
                    _client.BeginReceive(new AsyncCallback(ReceiveCallback), s);

                    // Do some work while we wait for a message. For this example, we'll just sleep
                    while (!messageReceived)
                    {
                        Thread.Sleep(100);
                    }

                    //process _recvBuffer
                                    
                    IPEndPoint server = new IPEndPoint(remoteEP.Address, 6666);  //具体端口视具体情况而定
                    byte[] data = null;
                    //data 赋值 回复
                    _client.Send(data, data.Length, server);
                }
                catch (Exception ex)
                {
                    log.Debug("err:" + ex.Message,ex);
                }
                
            }
            
        }
        


http://www.niftyadmin.cn/n/5284792.html

相关文章

Ubuntu20.04纯命令配置PCL(点云库)

Ubuntu20.04纯命令配置PCL(点云库) 最近在学习点云库(PCL)的使用,第一步就是在自己的电脑安装配置PCL。 首先,对于ubuntu 16.04以上版本,可以直接使用命令进行安装,新建好一个文件夹…

Vue核心语法、脚手架与组件化开发、VueRouterVuex、综合案例(待办事项工具)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 一、Vue核心语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name…

javaweb初体验

javaweb初体验 文章目录 javaweb初体验前言一、流程&#xff1a;1.创建Maven的父工程2.创建Maven&#xff0c;Webapp的子工程3.在pom.xml文件中添加依赖&#xff08;父工程与子工程共用&#xff09;4.写一个helloservlet类实现httpservlet接口&#xff0c;重写doget&#xff0c…

k8s学习 — (实践)第六章 配置与存储

k8s学习 — &#xff08;实践&#xff09;第六章 配置与存储 学习资料1 配置管理1.1 ConfigMap1.1.1 创建1.1.2 使用 ConfigMap 1.2 加密数据配置 Secret1.3 SubPath 的使用1.4 配置的热更新1.4.1 通过 edit 命令直接修改 configmap1.4.2 通过 replace 替换 1.5 不可变的 Secre…

R语言 | 组学各类图形绘制资源

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 写在前面 今天分享在GitHub中找到的教程资源&#xff0c;此教程是来自iMeta期刊及“农心生信工作室”的作品。发表在GitHub中&#xff0c;大家可以自行下载。 包含了21个图形的绘制&#xff0c;我大体看了一下…

SpringMVC 高级

1 SpringMVC 概述 三层架构 表现层&#xff1a;负责数据展示 业务层&#xff1a;负责业务处理 数据层&#xff1a;负责数据操作 概念 Spring MVC 是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。 MVC&#xff08;Model View Controller&#xff09;&#xff0…

数据结构之<堆>的介绍

1.简介 堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列。堆是一个可以被看作近似完全二叉树的结构&#xff0c;并且具有一些特殊的性质&#xff0c;根据这些性质&#xff0c;堆被分为最大堆&#xff08;或者大根堆&#xff0c;大顶堆&#xff09;和最小堆两种。 2.…

SpringBoot运维(四)-- 多环境开发控制

目录 引言: 1. 先在maven环境中设置用什么具体的环境 2. 在SpringBoot中读取maven设置的环境 引言: 多环境开发到这里基本上说完了&#x