线程的应用udpClient通信

Unity3D UDP通信实战:从原理到生产级框架实现 UDP(用户数据报协议)作为一种无连接的传输层协议,其核心原理在于提供了一种轻量级、低延迟的数据传输方式,通过舍弃TCP的可靠性保证机制来换取更高的传输效率。这一技术特性使其在实时性要求高的场景中展现出独特价值,尤其在游戏开发、物联网和实时音视频领域。在Unity3D引擎中,虽然官方网络方案更侧重于TCP或高层抽象,但通过C#的System.Net.Sockets命名空间,开发者可以深入底层,构建自定义的UDP通信模块。这涉及到异步IO处理、数据序列化、线程安全以及主线程协同等关键技术实践。本文聚焦于解决U 阅读详情
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace UDP
{
    class Program
    {
        private static  UdpClient udpSender;

        private static  UdpClient udpRecver;

        static void Main(string[] args)
        {
            //BeginListen();
            IPEndPoint localIpEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345); //本机ip,发送的ip地址

            udpSender = new UdpClient(localIpEP);


            Thread thrSend = new Thread(SendMessage);  发送的线程

            thrSend.Start("hello,this is server");

            BeginListen();     开启接收线程

            Console.WriteLine("server started");


            Console.Read();
        }
        private static void BeginListen()
        {
            IPEndPoint localIpep = new IPEndPoint(

           IPAddress.Parse("127.0.0.1"), 8849); // 本机IP和监听端口号 ********************这个监听端口是必须的(个人的理解)



            udpRecver = new UdpClient(localIpep);

            Thread thrReceive = new Thread(ReceiveMessage);

            thrReceive.Start();

            Console.WriteLine("client started");
        }
        private static void ReceiveMessage()
        {
            // throw new NotImplementedException();

            IPEndPoint remoteIpEP = new IPEndPoint(IPAddress.Any, 0);
            while (true)
            {
                // 从远处接收到的数据
                byte[] bytReceive = udpRecver.Receive(ref remoteIpEP);

                string msg = Encoding.Unicode.GetString(bytReceive, 0, bytReceive.Length);

                Console.WriteLine("received from server");
                Console.WriteLine(msg);
            }
            
        }

        private static void SendMessage(object obj)
        {
            //throw new NotImplementedException();

            // string msg = (string)obj;
            string msg ="this is send data";

            byte[] sendbytes = Encoding.Unicode.GetBytes(msg);
            //发送到的ip地址
            IPEndPoint remoteIpEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8849);  发送到的ip地址

            udpSender.Send(sendbytes, sendbytes.Length, remoteIpEP);

            udpSender.Close();

            
        }
    }
}

C# UDPClient类(通过UdpClient类实现局域网UDP通讯) 1、UDP(User Data Protocol,用户数据报协议) (1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。 (2) 由于传输数据 阅读详情

相关推荐

C#网络编程 - 局域网聊天室(UDP)

一:知识预览 TextBox禁止编辑 ComboBox元素的添加 获取本机网卡IPs 多道程序设计(多线程) 二:界面设计 三:通讯逻辑 【知识预览】 1> TextBox禁止编辑 private void textBox2_KeyPress(object sender, KeyPressEventArgs e) { //控制TextBox无法被编辑 ...

⚡ 1846

[C#] UDP协议 常用简单的代码(基于UdpClient类)(Thread实现)

在使用C#开发Winform、WPF等富客户端应用程序时,会有进程之间相互通信的需求。这里展示一种使用UdpClient类,能够实现消息收发的C#代码。

qq_45689779的博客 2532

C#里使用UdpClient和线程来创建UDP网络通讯

UDP是无法发送大量的数据,如果要发送大量的数据,需要自己控制重发机制,需要自己重发丢包的数据包。虽然UDP是无连接的协议,比TCP要差那么一些,但是对于简单的数据读取,又是很方便的。如果只是用来不断地读取数据,那么丢掉几个数据包是不会影响应用,那么就可以使用。又或者与PLC通讯,而PLC采用UDP的协议,而不是使用TCP协议。打开两个程序,然后修改为不同的端口,就可以在同一台电脑上测试了。作为一个软件开发人员,所以必须要熟练地使用UDP进行通讯,在开发的过程中,时不时就需要使用到UDP通讯。

大坡3D软件开发 1585

TCP/UDP编程基础

TCP/UDP编程基础一、UDP通信1.vs创建项目2.代码发送端接受端3.结果二、Form窗口程序1.创建新项目2.界面设计3.代码客户端代码服务器端代码5.结果三、端口扫描1.单线程2.多线程3.结果对比四、抓包分析五、总结六、参考 一、UDP通信 1.vs创建项目 选择创建新项目,选择控制台应用 接下来选择路径完成创建 2.代码 发送端 代码: using System; using System.Collections.Generic; using System.Linq; using Syst

xyf_fate的博客 984

基于UDP协议的UDPServer与UDPClient通信实现详解

epoll是Linux特有的I/O事件通知机制,相比传统的select和poll,它采用红黑树管理文件描述符,支持边缘触发(ET)模式,避免了每次调用都要遍历全部fd的性能问题。其核心API包括::创建epoll实例:注册/修改/删除监听的fd:等待事件发生,返回就绪列表类似地,FreeBSD和macOS使用kqueue,通过kevent()系统调用实现相同功能。下面展示一个基于epoll的UDP服务器框架:while(1) {

weixin_33610780的博客 874

C#基础UDP通信实现

UDP(用户数据报协议)是一种无连接的网络协议,用于在网络中的设备之间发送数据包。由于其简单的处理机制,UDP常用于需要低延迟的应用程序,如实时视频流或音频会议。它不保证数据包的顺序、完整性或可靠性,因此需要应用层提供这些功能。

weixin_34618526的博客 790

C# UDPCLIENT多线程实例

//创建一个Thread实例 private Thread thread1; //创建一个UdpClient实例 private UdpClient udpReceive; private UdpClient udpSend; private byte[] bytes; //private DialogRe...

weixin_30855099的博客 630

基于C#的UDP打洞软件设计与实现

尽管我们绞尽脑汁优化打洞策略,但在现实世界中,仍有大量设备位于双重NAT、CGNAT甚至严格防火墙之后,根本无法穿透。这时候就需要引入中继服务器(TURN机制)作为后备方案。它的角色非常清晰:1.注册与发现:客户端启动后连接服务器,上报自己的公网映射;2.信息转发:当另一客户端查询目标地址时,服务器返回其最新映射;3.心跳维护:定期确认在线状态,清理失效会话;4.降级支持:当打洞失败时,临时充当中继转发数据;

weixin_35748962的博客 570

C# UDP编程实战:UdpClient异步通信与网络编程核心技术解析

在网络编程中,传输层协议是构建分布式应用的基石。UDP(用户数据报协议)作为一种无连接、面向数据报的轻量级协议,其核心原理在于牺牲可靠性以换取极低的延迟和开销。这一技术特性使其在实时性要求高的场景中具有不可替代的价值,如在线游戏、音视频传输和物联网数据上报。通过C#中的UdpClient类,开发者可以高效实现异步数据收发,结合async/await模式避免UI线程阻塞,同时利用缓冲区设置和超时控制优化性能。本文聚焦UdpClient的异步操作、数据报处理及常见问题排查,为构建高响应性网络应用提供实践指导。

weixin_29224309的博客 322

C# UDP多线程发送接收

通过多线程的方式实现了UDP收发数据 可以快速学习UDP通讯原理应进行实际应用

闲人闲谈PS之一项目库存跨公司业务STO解决方案--SAP闲人的开篇

写这篇文章之前,简单说一下发这篇文章的动机。也算是在SAP这一行干了快10多年,在对一个模块了解越来越深入,越发觉自己的SAP知识浅薄。总的来说,和多数顾问一样,对于**标准功能**的应用业务场景理解还是存在或多或少的知识盲区。 因为一个偶然,看到SAP团子君的文章,分享了很多干货文章。这也是自己一直想做的时候,不管水平高低与否,分享本身就意味着提升。好了废话不多说,先在优快云上发一篇吧,困惑自己将近10年的问题的解决方案。 业务场景:在项目型企业中,通常会有这样的业务,母公司和客...

SAP闲人的博客 9269

UDP网络编程

UDP网络编程UDP编程模型基于UDP传输协议的socket网络编程UDPclientUDPserver引入多线程解决阻塞问题客户端服务器端 UDP编程模型 服务器端也是套接字,但是与客户端的写法不太一样。 因为socket都是成对存在的,服务端的套接字总领全局,不与任何客户端进行通信,当有一个客户端的套接字连接到服务器上时,服务器应该为每一个客户端分配一个新的套接字进行通信。 基于UDP传输协...

qq_34352013的博客 459

汽车以太网- IEEE 802.3标准

关于汽车以太网,大家看到最多的标准大概就是IEEE802.3bw,也就是我们车内使用的百兆以太网,专业称呼是100BASE-T1,该标准是车内百兆以太网的物理层协议,是我们学习汽车以太网必须要了解的协议。在正式了解协议之前,我们先介绍下什么是IEEE802.3标准。............

weixin_39974126的博客 7114

Java Socket 基于UDP协议的多线程连接

上一篇: Java Socket 多线程简单入门案例 目录结构 ClientBean.java源码 package socket.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import

天下没有难写的代码 751

Python+Flask+Echarts打造全国气象数据可视化分析大屏

本文详细介绍了如何使用Python+Flask+Echarts构建全国气象数据可视化分析大屏,实现实时监控、趋势分析和快速决策。通过Python强大的数据处理能力、Flask的轻量级优势和Echarts的交互体验,打造高效的气象数据可视化系统,提升农业、物流等行业的决策效率。

weixin_29061531的博客 1061

Cartographer实现双雷达建图

TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 2 --执行一次前端匹配需要的激光扫描分段数量。关于num_subdivisions_per_laser_scan。num_laser_scans =2,--订阅激光扫描话题数量。Frame改为 前雷达laser_1 后雷达laser_2。雷达的话题由scan改为,前scan_1 后scan_2。有些人说需要改成2,但我这里改成2反而不行,1才可以。

Studying…… 1261

C#事件,多线程,网络编程

优点:可以自定义返回值类型,参数个数,参数类型缺点:先定义委托类型,再通过委托定义事件//定义委托//事件发布//根据委托类型定义一个事件,event关键字//在事件发布者类中,定义一个方法触发事件On...throw//绑定方法为了解决进程调度资源的浪费,为了能够共享资源,出现了线程。线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源,多个线程共享内存,从而极大地提高了程序的运行效率。线程是比进程更小的执行单位,线程是进程内部单一的一个顺序控制流。

2302_77587048的博客 772

Allegro172版本多人协同在线设计操作指导

首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本。另外一个用户同样打开相同版本的172,选择Symphony Team design。Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下。协同模式下,不能直接保存文件,需要另存版本,注意时常保存文件,以免丢失数据。第一个用户打开PCB,选择Symphony Team design。等待一会出现如下窗口,表示已经共享成功了,并且记下IP地址。出现一个窗口,输出开共享用户的IP地址。

weixin_54787054的博客 4954

c#软件开发学习笔记--TcpListener\TcpClient\UdpClient

循环 +。这是 WinForms 下避免阻塞 UI 线程的标准做法。

Z599817841的博客 262

零基础实战:用 Docker 和 vLLM 本地部署 BGE-M3 文本嵌入模型

BGE-M3是北京智源推出的多功能文本嵌入模型,支持跨语言语义匹配。利用Docker容器化和vLLM框架可高效部署该模型,实现本地运行的优势包括隐私保护、定制化和成本控制。通过配置Docker环境,使用vLLM官方镜像加载模型,并进行文本嵌入测试验证效果。该方案适合开发者快速验证模型能力,或集成到本地NLP流程中。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4956

基于Simulink进行步进电机的重复控制仿真建模

目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

MHD0815的博客 382

Csharp学习笔记——多线程、网络编程、LINQ语法

多线程的核心目的是让程序可以并发执行多个任务,提高响应性和处理能力。在 C# 中,Thread 适合理解线程本质,涉及共享数据时,要重点关注同步和线程安全问题。LINQ 是 C# 中非常重要的查询工具,它让集合操作更加简洁、统一、易读。掌握 Where、Select、OrderBy、GroupBy、Count 等常用操作后,基本可以覆盖大部分集合处理场景。作业创建`Employee类(员工编号Id、员工姓名Name、部门Department、薪水Salary场景:员工薪资分析要求。

aliilla的博客 409

Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录

Nvidia Jetson平台GStreamer in JP4.2.1不能采集但是 v4l2-ctl和 ffmpeg能正常采集视频。

jzwjzw19900922的博客 2127

第26-30天:网络编程、异步、LINQ和委托,我终于搞懂了这些“高级玩意儿”

C#内置了两个通用委托,省去了自己写delegateAction:无返回值,可以有0-16个参数Func:有返回值,最后一个泛型参数是返回值类型Action用在“只做事情不需要结果”的场景(日志打印、UI更新);Func用在“需要计算结果”的场景(数学运算、数据转换)。

Livelt的博客 191

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C使用UDPClient实现异步通信的两种表现形式:异步编程的灵活应用

C使用UDPClient实现异步通信的两种表现形式:异步编程的灵活应用 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代软件开发中,网络通信是不可或缺的组成部分。UDP(User Datagram Protocol)作为一种无连接的协议,以其低延迟、高效率的特点被广泛应用于实时通信等领域。本项目是一个C#编写的控制台程序,旨在展示如何使用UDPClient实现异步...

gitblog_06742的博客 587

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

.NET 网络编程 TCPClient 、 TCPListener 、 Socket 、 UdpClient

再继续进行之前,我们假设客户端可以发送多条消息,而服务端要不断的接收来自客户端发送的消息,但是上面的代码只能接收客户端发来的一条消息,因为它已经输出了“输入Q键退出”,说明程序已经执行完毕,无法再进行任何动作。本章的所有操作都是同步操作,像上面的代码也只是作为一个入门的范例,实际当中,一个服务端只能为一个客户端提供服务的情况是不存在的,下面就让我们来看看上面所说的第四种情况,如何进行异步的服务端编程。我们接着再进行进一步处理,服务端将收到的字符串改为大写,然后回发,客户端接收后打印。

Kaizen的博客 1671

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: dikesitela 迪克斯特拉算法
下一篇: 反射的使用
Bill11YAng
博客等级 码龄14年 165粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值