C#中的Udp已经TCP 客户端发送/接收

 C#中的Udp

  // TCP   面向长连接  面向流     // UDP   面向无连接   面向数据报    :UDP如何确定当前网络中的其客户端   广播Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);socket.Bind(new IPEndPoint(IPAddress.Any, 9009));//   一个UDP客户端Task.Run(() =>{byte[] buffer = new byte[1024];EndPoint iPEndPoint = new IPEndPoint(IPAddress.Any, 0);socket.ReceiveFrom(buffer, ref iPEndPoint);Console.WriteLine(Encoding.UTF8.GetString(buffer));// iPEndPoint  指的是哪个客户端发过来的// 启动后,发送一个广播,接收到广播后   给发广播的人一个回应});// 无连接   这个消息会往这个局域网里丢// 前面不需要连接动作//socket.SendTo(new byte[] { 0x01, 0x02 }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);// Socket对象的配置属性socket1.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);socket1.SendTo(new byte[] { 0x01, 0x02 }, new IPEndPoint(IPAddress.Parse("255.255.255.255"), 6666));

TCP 客户端发送/接收

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));// 同步处理
{//byte[] buffer, int offset, int size, SocketFlags socketFlagsstring msg = "Hello";byte[] data = Encoding.UTF8.GetBytes(msg);//for (int i = 0; i < 10; i++){socket.Send(data, 0, data.Length, SocketFlags.None);}Console.ReadLine();发送  上位机(客户端)主动请求设备(服务器)通信过程,一问一答     请求-》响应   开始接收响应byte[] buffer = new byte[1024 * 1024];// 如果没有应用层协议规定长度   ModbusTCP  请求多少个寄存器   返回的特定的长度TCP  : 面向数据流,没有明显边界    数据包中记录有效字节数    S7Console.WriteLine("开始接收");socket.Receive(buffer);// 1、有数据进来   不会就卡住       2、确保字节的长度Console.WriteLine("接收完成");//Send有没有时间间隔// 异步-》对应哪个发送的请求// 返回接收报文 
}AutoResetEvent autoResetEvent = new AutoResetEvent(false);// 异步读写
{string msg = "Hello";byte[] data = Encoding.UTF8.GetBytes(msg);var result = socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ret =>{// 异步方法,同步的处理try{socket.EndSend(ret);// 发送未完成,就开始接收响应byte[] buffer = new byte[1024];Console.WriteLine("开始接收");//socket.Receive(buffer);//while (true)// 需要必须拿到数据才往下走{var result = socket.BeginReceive(buffer, 0, 1024, SocketFlags.None, new AsyncCallback(DoAsync), socket);bool s = result.AsyncWaitHandle.WaitOne(500);// 等待500毫秒    以内完成接收动作  if (!s)Console.WriteLine("接收超时");//else//    break;autoResetEvent.Set();}// 耗时// 等待一个通知autoResetEvent.WaitOne();// 处理Console.WriteLine(Encoding.UTF8.GetString(buffer));}catch (Exception ex){Console.WriteLine(ex.Message);}}), socket);//result.AsyncWaitHandle.WaitOne();Console.WriteLine("开始发送");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(计算机毕设)基于Vue和Spring Boot的宠物救助网站设计与实现

博主可接毕设&#xff01;&#xff01;&#xff01; 毕业设计&#xff08;论文&#xff09; 基于Vue和Spring Boot的宠物救助网站设计与实现 摘 要 随着中国互联网的迅猛发展&#xff0c;传统宠物救助领域面临着信息管理繁琐、辐射范围有限、信息传播受限、丢失宠物找回几率较…

机器学习框架(含实例说明)

机器学习框架是用于开发和部署机器学习模型的软件库和工具集。它们提供了一系列的算法、工具和基础设施&#xff0c;帮助开发者更高效地构建、训练和部署机器学习模型。以下是一些主要的机器学习框架及其详细介绍&#xff1a; 1. TensorFlow TensorFlow 是由Google开发的开源…

卫瓴科技,驶向「协同CRM」深水区

在卫瓴协同CRM的产品之上&#xff0c;能看到的不单纯是产品本身&#xff0c;即“提高转化率”这个单纯的指标&#xff0c;而更多的是在产品之中蕴含的“现代企业营销建设”的科学理念和认知。以此为基础&#xff0c;企业可以构建真正有价值且能长期驱动的品牌营销模型。 作者…

对比 Babel、SWC 和 Oxc:JavaScript 和 TypeScript 工具的未来

随着现代前端开发的快速演变&#xff0c;JavaScript 和 TypeScript 的工具链不断更新&#xff0c;以满足开发者对性能和效率的需求。我们将对比三款流行的工具&#xff1a;Babel、SWC 和 Oxc&#xff0c;重点分析它们的特点、性能、应用场景以及适用性。 1. Babel&#xff1a;…

攻防世界---->sherlock

做题笔记。 下载。 单词中出现大写很可疑。因为大写最多出现在开头等。 猜测是隐写术。 进行筛选。 借助python实现 with open(C:\\Users\\Acer\\Downloads\\f590c0f99c014b01a5ab8b611b46c57c.txt, r) as file:text file.read() uppercase_letters [char for char in text…

Study-Oracle-11-ORALCE19C-ADG集群测试

一、用户及数据测试 1、主库创建tes3用户&#xff0c;创建表test_table。备库登录test3用户并查询test_table表中数据。 -- 创建用户 CREATE USER test7 IDENTIFIED BY test7;-- 给予创建会话的权限 GRANT CREATE SESSION TO test7;-- 给予创建表的权限 GRANT CREATE TABLE TO…

理解defineProperty以及getter、setter

文章目录 对象属性注意点理解defineProperty描述符的原型与默认值getter和setter 理解defineProperty以及getter、setter&#xff0c;学习它们之间的联系 对象属性注意点 我们一般修改对象通过obj.key这样的方式访问到&#xff0c;要设置/修改对象的属性&#xff0c;只需要obj…

贴吧软件怎么切换ip

在网络使用中&#xff0c;有时我们需要切换IP地址来满足特定的需求&#xff0c;比如需要切换贴吧软件IP以进行不同的操作。本文将介绍几种贴吧切换IP地址的方法&#xff0c;帮助用户更好地管理自己的网络身份和访问权限。 1、更换网络环境‌ 通过连接到不同的Wi-Fi网络或使用移…

解决雪花ID在前端精度丢失问题

解决雪花ID在前端精度丢失问题 在现代分布式系统中&#xff0c;雪花算法&#xff08;Snowflake&#xff09;被广泛用于生成唯一的ID。这些ID通常是Long类型的整数。然而&#xff0c;当这些ID从后端传递到前端时&#xff0c;JavaScript的精度限制可能会导致精度丢失&#xff0c…

Android 电源管理各个版本的变动和限制

由于Android设备的电池容量有限&#xff0c;而用户在使用过程中会进行各种高耗电操作&#xff0c;如网络连接、屏幕亮度调节、后台程序运行等&#xff0c;因此需要通过各种省电措施来优化电池使用‌&#xff0c;延长电池续航时间&#xff0c;提高用户体验&#xff0c;并减少因电…

容器管理工具Docker

├──5-容器管理工具Docker | ├──1-容器管理工具Docker | | ├──1-应用部署容器化演进之路 | | ├──10-Docker容器数据持久化存储机制 | | ├──11-Docker容器服务编排利器DockerCompose应用实战 | | ├──12-Docker主机集群化方案DockerSwarm | …

docker compose入门1—概念介绍

Docker Compose 是 Docker 的一个工具&#xff0c;专门用于定义和运行多容器 Docker 应用程序。它通过使用一个配置文件&#xff08;通常是 docker-compose.yml&#xff09;来简化管理多个容器的流程&#xff0c;尤其适用于开发、测试和轻量级的生产环境。Compose 工具可以帮助…

开源的云平台有哪些?

开源云平台为用户提供了构建、管理和运行云基础设施及应用的能力&#xff0c;同时允许社区参与开发和改进。以下是一些知名的开源云平台&#xff1a; 1. OpenStack 简介&#xff1a;OpenStack&#xff1a;一个广泛使用的开源云平台&#xff0c;它由多个组件组成&#xff0c;提…

【ubuntu】修改用户名、主机名、主文件夹名、登录名、密码

目录 1.他们是什么 2.修改方法 2.1 修改用户密码 2.2 修改主机名 2.2.1 切换到root用户 2.2.2 修改名称 2.3 修改用户名 主文件夹名 登录名 2.2.1 sudoers 2.2.2 passwd 2.2.3 shadow 2.2.4 group 2.2.5 修改主文件夹名 3.重启 1.他们是什么 &#xff08;1&#xf…

一键生成PPT的AI工具-Kimi!

一键生成PPT的AI工具-Kimi&#xff01; 前言介绍Kimi为什么选择Kimi如何使用Kimi在线编辑PPT下载生成的PPT自己编辑 结语 &#x1f600;大家好&#xff01;我是向阳&#x1f31e;&#xff0c;一个想成为优秀全栈开发工程师的有志青年&#xff01; &#x1f4d4;今天不来讨论前后…

Rust语言特性简介

Rust语言在操作系统开发中的创新之处主要体现在以下几个方面&#xff1a; 内存安全&#xff1a;Rust的所有权模型和借用检查器在编译时保证了内存安全&#xff0c;减少了空指针解引用、缓冲区溢出等错误&#xff0c;这对于操作系统内核开发来说至关重要。 并发性&#xff1a;R…

前端反接保护:实用方案解析与探讨

前端反接保护通常采用肖特基二极管方案或PMOS/NMOS方案&#xff0c;本文另外介绍一种理想二极管方案。 1、肖特基二极管方案 由于肖特基二极管具有正向导通电压&#xff0c;只能用于小电流场合&#xff0c;甚至于直接使用普通的整流二极管。比如1A电流&#xff0c;设D1的正向…

STM32的USART技术介绍

USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff0c;通用同步/异步收发传输器&#xff09;是STM32微控制器中常用的串行通信接口之一。它支持同步和异步通信模式&#xff0c;广泛应用于各种数据传输场景&#xff0c;如串口通信、GPS模块连接…

OJ在线评测系统 微服务 用分布式消息队列 RabbitMQ 解耦判题服务和题目服务 手搓交换机和队列 实现项目异步化

消息队列解耦 项目异步化 分布式消息队列 分布式消息队列是一种用于异步通信的系统&#xff0c;它允许不同的应用程序或服务之间传递消息。消息队列的核心理念是将消息存储在一个队列中&#xff0c;发送方可以将消息发送到队列&#xff0c;而接收方则可以在适当的时候从队列中…

系统架构设计师论文《论企业集成平台的理解与应用》精选试读

论文真题 企业集成平台&#xff08;Enterprise Imtcgation Plaform,EIP)是支特企业信息集成的像环境&#xff0c;其主要功能是为企业中的数据、系统和应用等多种对象的协同行提供各种公共服务及运行时的支撑环境。企业集成平台能够根据业务模型的变化快速地进行信息系统的配置…