c#UDP协议通讯

在写具体的用c#实现UDP通讯的方式之前,我们要先搞清楚相关的概念,那就是什么是UDP协议。

UDP和TCP一样,是同属于TCP/IP协议簇的传输层协议:

这里一定要注意TCP/IP是指一堆协议的集合,而这些集合之中又属TCP协议和IP协议比较重要,所以就将此协议集合以TCP/IP的方式进行命名。

那么UDP协议和TCP协议有什么区别呢?

TCP协议是面向连接的协议,A端到B端要传输数据则需要进行三次握手建立连接,之后便是点对点的数据通讯,对于数据来说是可靠的。

而UDP协议是一种非连接的协议,在传输数据之前并没有什么三次握手建立连接的概念,它什么时候想发送数据就什么时候发送数据,什么时候想停止发送就什么时候停止发送。根本不管有没有接收端,这样做的结果便是其即时性很高,对比TCP能够大大减少数据延迟,多用于同步通信。但缺点是容易丢失数据,且不能保证数据的时序性。

好了,弄清楚了UDP协议的概念,那么我们下面便来说说如何在C#语言之中实现UDP的通信。

要实现UDP通信,我们需要使用UdpClient类。

创建监听的核心代码:

        UdpClient udpserver;
        private void udpListen()
        {
            udpserver = new UdpClient(8888);//参数为要进行UDP监听的端口
        }

接收数据的核心代码:

private void getMsg()//开启一个异步线程去执行该方法
{
    //定义一个IPEndPoint对象用来装载数据来源的IP和端口信息
    IPEndPoint remoteIpAndPort = new IPEndPoint(IPAddress.Any, 0);
    while (true)
    {
        //等待消息,注意,使用该方法在等待消息时会阻塞线程
        byte[] msgBytes = udpserver.Receive(ref remoteIpAndPort)
        string receivedStr = System.Text.Encoding.UTF8.GetString(msgBytes);
    }
}

 

发送数据的核心代码:

        private void buttonSend_Click(object sender, EventArgs e)
        {
            //将要发送的数据转化成byte数组
            byte[] b = System.Text.Encoding.UTF8.GetBytes("Hello");
            //创建目标IP端口信息
            IPEndPoint sendTo = new IPEndPoint(IPAddress.Parse("192.168.1.233"),1234);
            //发送数据
            this.udpserver.Send(b, b.Length, sendTo);
        }

 

热门文章

暂无图片
编程学习 ·

javaEE核心技术规范

1、JNDI(Java Naming and Directory Interfaces)Java 的命名和目录接口 JNDI是命名目录服务的抽象接口集合,为企业级应用提供了统一的标准化连接,使Java能够无缝地获取任何可目录化的企业信息。在JavaEE体系中,JNDI用来定位各种对象,包括EJB、数据库驱动、JDBC数据源及消…
暂无图片
编程学习 ·

Linux下用ls和du命令查看文件以及文件夹大小

ls的用法 ls -l |grep “^-”|wc -l或find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep “^-”|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。 ls -lR|grep “^d”|wc -l 说明:ls -l 长列表输出该目录下文件信息(注意这里…
暂无图片
编程学习 ·

int 作为POJO类属性的坑

int 作为POJO类属性的坑Lombok 主键更新 updateById ,这一句主键更新没有更新floorNumber 但是floorNumber 每次都被更新为 0@ApiModelProperty(value = "楼层")private int floorNumber;Integer up = 100; baseMapper.updateById(AppVillageCircleComment.builde…
暂无图片
编程学习 ·

动态任务

1.任务句柄 /* LED任务句柄 */ static TaskHandle_t LED_Task_Handle; 2.任务创建函数 BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务函数const char * const pcName, //任务名称const uint16_t usStackDepth, //堆栈大小void * const pvParamet…
暂无图片
编程学习 ·

mPaaS 插件正式上架 Jetbrains Market Place

今天 mPaaS 插件终于正式上架 Jetbrains Market Place 啦!!!它从一个简单的集成工具开始慢慢变成了围绕 mPaaS SDK 为核心的周边生态。越来越自信地开始以「产品」的形式展现在开发者面前。下载链接:https://plugins.jetbrains.com/plugin/14486-mpaasmPaaS for Android St…
暂无图片
编程学习 ·

Centos7x破解密码

办法一 1、开机启动部分1)开机e 选择第一行 e 2)找到Linux16所在行 ***.UTF8后面添加 rd.break console=tty0 3)ctrl + X2、启动到内核部分1)挂载/sysroot目录 #mount -o remount,rw /sysroot 2)切换到/sysroot目录 #chroot /sysroot 3)修改root密码 #echo passwo…
暂无图片
编程学习 ·

Springboot之PostMapping无法获取数据

在使用SpringBoot的PostMapping注解的时候,发现无法获取数据(get方法可行),经过一番查证,发现需要添加新的注解,举例如下://接受单个参数,使用RequestParam,并且添加上name属性,保证前后端的参数名称一致@PostMapping(value = "/users")public RestfulResp…
暂无图片
编程学习 ·

【Hadoop篇08】Hadoop数据压缩

简洁而不简单Hadoop数据压缩 数据压缩优点和缺点 ​ 压缩技术能够有效减少底层存储系统(HDFS)读写字节数。压缩提高了网络带宽和磁盘空间的效率。在 Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要。在这种情况下,IO操作和网络数据传输要…
暂无图片
编程学习 ·

quartus ii 使用modelsim altera进行仿真

第一种:先随便写一个程序,有输入,有时钟,有输出再点击processing-->start-->start test bench template writer然后就会在modlsim的文件中生成一个.vt的文件 然后打开这个文件接下来就是再initial和always里面添加信号保存,再点击首先看仿真软件是不是modelsin-altera,再…
暂无图片
编程学习 ·

支付宝支付回调,回调日志记录

1、支付报支付回调方法public function aliPayNotify(){try {$app = PayService::alipay();$collect = $app->verify();$collectData = $collect->all();//获取支付宝回调参数$this->writeAliPayLog($collectData, true);if ($collectData[trade_…
暂无图片
编程学习 ·

网上书城前端界面设计

网上书城界面设计前言界面设计首页登录注册书籍搜索购物车代码实现总结 前言 接着我的上一篇博客来,今天为大家分享的内容是网上书城项目的界面设计以及代码分析 网上书城项目需求分析、功能划分、数据库表设计、工具类介绍 界面设计 首页首页的话,主要涉及到了BootStrap的相…
暂无图片
编程学习 ·

Redis持久化

Redis的持久化1. RDB持久化2. AOF持久化 ​ Redis是内存数据库,里面存储的是自己的数据库状态,因此为了保证在意外情况下数据库状态的一致性,Redis提供了持久化功能。 1. RDB持久化 ​ 该功能就是将某个时间点上的数据库状态保存到一个RDB文件中,RDB文件是一个经过压缩的二…
暂无图片
编程学习 ·

配置好@RequsetMapping,但前端访问错误404

springMVC 配置好@RequestMapping 但是前端页面访问不到。错误404。 原因:配置dispartServlet时 需指定配置文件。如果指定的配置文件扫描不到@Controller所在的包,则无法找到@RequsetMapping。
暂无图片
编程学习 ·

游戏开发中的人工智能

前言 今天非常开心,观看cocos官方直播居然在几千人中中奖,可以买彩票了。 言归正传,所谓的人工智能,也就是大家常说的AI(Artificial Intelligence)。一说到AI可能就会让人觉得比较深奥,其实也就是非玩家角色思考和行为的综合。比如,在什么样的条件下,触发什么样的行为…
暂无图片
编程学习 ·

C++ builder listview 自绘条形图

菜鸟的学习笔记,如果对你有用最好。高手请无视。ListView 要开 Doublebuffervoid __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender, TListItem *Item,int SubItem, TCustomDrawState State, bool &DefaultDraw) { DefaultDraw=true; int lef=0; T…