C#__简单使用TCP/UDP发送消息

 

        Socket(套接字、插口)
        TCP和UCP的区别:
        1、基于连接和无连接
        2、对系统资源的要求(TCP较多,UCP少)
        3、UDP程序结构简单
        4、流模式和数据报模式
        5、TCP保证数据正确性和数据先后顺序,UDP可能丢包,且不保证数据到达先后顺序 

 

// 进行前先寻得本机IPv4地址

win + R ——>cmd——>输入ipconfig

 

 // TCP类

    class TCP{// 服务器端套接字(指定的寻址方案的一个实例.IPv4,套接字类型.字节流,支持的协议.TCP)Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 客户端套接字Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);//Internet 协议 (IP) 地址(IP 地址的字节数组值)IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 77, 1 });public void TcpServer(){//IP + Port(端口) 地址和端口号,端口号由自己指定,用于链接IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 0001);tcpServer.Bind(ipEndPoint);  /*将相关联 tcpServer 与本地终结点*/// 侦听tcpServer(挂起的连接队列的最大长度)tcpServer.Listen(20);Console.WriteLine("正在连接客户端……");// 新创建的连接Socket client = tcpServer.Accept();Console.WriteLine("一个客户端链接过来了");// 接收信息byte[] data = new byte[1024];// 将tcpServer数据的按字节存入接收缓冲区(接收到的数据的存储位置)int length = client.Receive(data);//字符编码.获取 UTF-8 格式的编码.将指定字节数组中的一个字节序列解码为一个字符串(包含要解码的字节序列的字节数组,第一个要解码的字节的索引,要解码的字节数)string message = Encoding.UTF8.GetString(data, 0, length);Console.WriteLine("接收到客户端的消息:" + message);// 发送消息,将指定字符串中的所有字符编码为一个字节序列client.Send(Encoding.UTF8.GetBytes("欢迎你的到来"));// 关闭Socket连接和释放所有关联资源client.Close();tcpServer.Close();}public void TcpClient(){//IP + Port(端口),与客户端一致,保证接收IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 0001);//建立与远程主机的连接(远程设备)tcpClient.Connect(ipEndPoint);Console.WriteLine("链接上了服务器端!");string message = "我上线了";tcpClient.Send(Encoding.UTF8.GetBytes(message));byte[] data = new byte[1024];int length = tcpClient.Receive(data);Console.WriteLine("接收到服务器的信号:" + Encoding.UTF8.GetString(data));tcpClient.Close();}}

// UDP类

    class UDP{Socket udpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 77, 1 });public void UdpSer(){IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1111);// udpServer连接节点ipEndPintudpServer.Bind(ipEndPoint);// 提供了一个指示服务器必须侦听的所有网络接口上的客户端活动的 IP 地址IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 0);// 标识网络地址,abstrct类EndPoint ep = ipep;byte[] data = new byte[1024];// 接收到数据缓冲区,将存储终结点(数据的存储位置,引用传递(远程服务器))int length = udpServer.ReceiveFrom(data, ref ep);Console.WriteLine("接收到来着UDP客户端的数据:" + Encoding.UTF8.GetString(data, 0, length));udpServer.Close();}public void UdpCnt(){byte[] data = Encoding.UTF8.GetBytes("你好,udp客户端上线了");IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1111);udpClient.SendTo(data, ipEndPoint);udpClient.Close();}}

// 主程

        static void Main(string[] args){// TCPTCP server = new TCP();Thread sr = new Thread(server.TcpServer);Thread ct = new Thread(server.TcpClient);sr.Start();ct.Start();Thread.Sleep(1000);sr.Abort();ct.Abort();// UDPUDP udp = new UDP();Thread sUdp = new Thread(udp.UdpSer);Thread cUdp = new Thread(udp.UdpCnt);sUdp.Start();cUdp.Start();Thread.Sleep(1000);cUdp.Abort();sUdp.Abort();}

// 结果

正在连接客户端……
链接上了服务器端!
一个客户端链接过来了
接收到客户端的消息:我上线了
接收到服务器的信号:欢迎你的到来  接收到来着UDP客户端的数据:你好,udp客户端上线了
请按任意键继续. . .

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

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

相关文章

关于地址存放的例题

unsigned int a 0x1234; unsigned char b *(unsigned char*)&a; 上面代码大端存储和小端存储的值分别是多少? 大端存储的是把高位地址存放在低位地址处,低位存放到高位。小端是高位存放在高位,低位在低位。因为a是整型,所…

GraphQL基础知识与Spring for GraphQL使用教程

文章目录 1、数据类型1.1、标量类型1.2. 高级数据类型 基本操作2、Spring for GraphQL实例2.1、项目目录2.2、数据库表2.3、GraphQL的schema.graphql2.4、Java代码 3、运行效果3.1、添加用户3.2、添加日志3.3、查询所有日志3.4、查询指定用户日志3.5、数据订阅 4、总结 GraphQL…

C 语言简单入门

C 语言发展历史|标准 1972年,丹尼斯里奇(Dennis Ritch)和肯汤普逊(Ken Tompson)在贝尔实验室开发 UNIX 操作系统时基于 B 语言设计出 C 语言。 1987年,布莱恩柯林汉(Brian Kernighan&#xff…

数据库基础理论

什么是数据库? 数据:描述事物的符号记录,可以是数字、文字、图形、图像、声音、语言等,数据有多种形式,他们都是可以经过数字化后存入计算机。 数据库:存储数据的仓库,是长期存放在计算机内、…

世界前沿技术发展报告2023《世界信息技术发展报告》(三)量子信息技术

(三)量子信息技术 1. 概述2. 量子计算2.1 阿里巴巴达摩院成功研制两比特量子芯片,单比特操控精度超99.97%2.2 加拿大Xanadu公司开发出可编程光量子计算机2.3 美国英伟达公司为经典-量子混合计算推出开发架构2.4 日本国家自然科学研究所开发出…

SpringBoot实战

ISBN: 978-7-115-43314-5 作者:【美】Craig Walls 译者:丁雪丰 页数:209页 阅读时间:2022-12-27 推荐指数:★★★☆☆ 阅读本书还是要有一定的基础的,如果想要入门级还是不行, 建议入门级可以看…

python+nodejs+php+springboot+vue 法律知识分享科普系统平台

在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 要想实现法律知…

数字图像基础,数字图像处理中的基础内容(数字图像处理概念 P2)

文章目录 人类视觉系统构造数字图像生成采样和量化像素之间的基本关系 人类视觉系统构造 锥状体:明亮的视野杆状体:微光或暗视野图像成像原理:类似照相机亮度适应现象:人的视觉不能同时在一个范围内工作同时对比现象:…

el-select的某一项选中后显示id

环境: vue3element-plus 今天在使用elementui的下拉组件的时候发现有一个选项在选中后显示的是id.找了会没看到问题,后来想到会不会是没有设置key的原因(之前看到说vue3可以不用设置key),果然加上key就可以了

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量:名义型、有序型、连续型变量 名义型:普通事件类型,如糖尿病I型和糖尿病II型。 有序型:有顺序的事件类型,如一年级、二年级和三年级。 连续型:表示有顺序的数量,如年龄。 因子:…

基于Python+Django的热门旅游景点数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

C++项目:仿muduo库实现高性能高并发服务器

文章目录 一、实现目标二、前置知识(一)HTTP服务器1.概念 (二)Reactor模型:1.概念2.分类(1)单Reactor单线程:单I/O多路复用业务处理。(2)单Reactor多线程&…

ultraEdit正则匹配多行(xml用)

在ultraEdit中&#xff0c;我想选取<channel到</channel>之间的多行&#xff08;进行删除&#xff09;。在perl模式下&#xff0c;命令为“<channel[\s\S]?</channel>”。下面是xml文件&#xff1a; <!--This XML file does not appear to have any sty…

在北京多有钱能称为富

背景 首先声明&#xff0c;此讨论仅限个人的观点&#xff0c;因为我本身不富嘛&#xff0c;所以想法应该非常局限。 举个栗子 富二代问我朋友&#xff0c;100~1000w之间&#xff0c;推荐一款车&#xff1f; 一开始听到这个问题的时候&#xff0c;有被唬住&#xff0c;觉得预…

Linux知识

文章目录 一、Apt1、查看操作系统信息2、换源3、比较4、用法5、ubuntu获取源码 二、pkg-config三、调试glibc四、问题 一、Apt 1、查看操作系统信息 使用以下命令查看本机的操作系统和位数信息&#xff1a; uname -m && cat /etc/*release输出&#xff1a; x86_64 D…

多线程带来的的风险-线程安全

多线程带来的的风险-线程安全 ~~ 多线程编程中,最难的地方,也是一个最重要的地方&#xff0c;还是一个最容易出错的地方,更是一个面试中特别爱考的地方.❤️❤️❤️ 线程安全的概念 万恶之源,罪魁祸首是多线程的抢占式执行,带来的随机性.~~&#x1f615;&#x1f615;&…

API(十)时间相关的SDK

一 时间相关的SDK ① 时间记录的必要性 1、案发现场的时间点2、通过时间判断性能3、时间的不准确性,日志落盘时间 --> 缓冲区导致延迟 ② 使用哪些日期和时间的函数 1、lua 标准时间函数,函数 os.time、os.date 和 os.difftime 提供了所有日期和时间2、在 openresty…

windows 深度学习环境部署

1. 根据显卡配置安装适合的CUDA,查看显卡配置可在显卡控制面板上查看,安装是否成功可通过nvidia-smi查看&#xff1b;注意安装路径 https://developer.nvidia.com/cuda-toolkit-archive 2. 根据cuda安装合适的cudnn&#xff0c;需要注册NVIDIA cuDNN Archive | NVIDIA Devel…

自定义数据类型

前言&#xff1a;小伙伴们又见面啦&#xff0c;今天这篇文章&#xff0c;我们来谈谈几种自定义数据类型。 目录 一.都有哪些自定义数据类型 二.结构体 结构体内存对齐 1.如何对齐 2.为什么要对齐 3.节省空间和提升效率的方法 &#xff08;1&#xff09;让占用空间小的成员…

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例 第23章 多功能文档查看器实例23.1. 简介23.2. 界面与程序框架设计23.2.1. 图片资源23.2.2. 网页资源23.2.3. 测试用文件 23.3 主程序代码框架23.4 浏览网页功能实现23.4.1 实现HtmIHandler处理器 23.5. 部分代码实现23.5…