udp udpClient 聊天室

news2025/4/21 19:18:11

简介

1、UDP(User Data Protocol,用户数据报协议)
(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。


udpClient服务器

搭建服务器界面

打开
UdpClient udp;
// 打开
private void button1_Click(object sender, EventArgs e)
{
    // 1 创建udp对戏那个 指定ip地址和端口号
    udp = new UdpClient(new IPEndPoint(IPAddress.Any, 8080));

    // 2 接收数据
    startReceive();
}
接收数据方法
private void startReceive()
{
    new Thread(() =>
    {
        try
        {
            while (true)
            {
                // 创建一个ip接收客户端的ip地址
                IPEndPoint ip = null;
                byte[] body = udp.Receive(ref ip);
                string s = Encoding.UTF8.GetString(body);
                BeginInvoke((Action)(() =>
                {
                    richTextBox1.AppendText(ip.ToString() + ":" + s + "\t\n");
                }));
            }
        }
        catch 
        {

        }
    }).Start();
}
关闭
private void button2_Click(object sender, EventArgs e)
{
    udp.Close();
    udp = null;
}

private void button3_Click(object sender, EventArgs e)
{
    byte[] bs = Encoding.UTF8.GetBytes(this.textBox1.Text);
    // 发数据
    // 参数1 字节数组
    // 参数2 字节长度
    // 参数3 目标主机地址
    // 参数4 端口号
    udp.Send(bs,bs.Length,"192.168.107.60",8080);
}

udpClient组播

客户端

打开服务器
UdpClient udp;
// 打开服务器
private void button3_Click(object sender, EventArgs e)
{
    udp = new UdpClient(new IPEndPoint(IPAddress.Any,8080 ));
    strarReceive();
    Console.WriteLine("222222");


}
异步的方式

        1 new Thread() 分界线
        2 Task.Run() 异步任务
        3 async(异步) 和 await(等待)

async void strarReceive()
{
    while (true)
    {
        // await 跟一个异步任务
        // 等待异步任务结束之后 再去执行
        // 
        UdpReceiveResult body = await udp.ReceiveAsync();
        // body.RemoteEndPoint 远程终端
        // body.Buffer 数据字节数组
        BeginInvoke((Action)(() =>
        {
            richTextBox1.AppendText(body.RemoteEndPoint.ToString()+":"+Encoding.UTF8.GetString(body.Buffer)+"\t\n");

            this.richTextBox1.ScrollToCaret();
        }));

    }
}
加入组播地址
 private void button1_Click(object sender, EventArgs e)
 {
     // Join 加入
     // 
     udp.JoinMulticastGroup(IPAddress.Parse(this.textBox1.Text)); // 加入组播地址
 }
发送消息
private void button2_Click_1(object sender, EventArgs e)
{
    // 发送消息
    byte[] bs = Encoding.UTF8.GetBytes(this.textBox2.Text);
    udp.Send(bs, bs.Length, this.textBox1.Text, 8080);
}

效果如下

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

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

相关文章

【笔记】备份VScode代码至GitHub

目录 不小心把代码删掉了,还没备份备份步骤创建新工作区和测试文件还有GitHub项目初始化git注意 最后一步 不小心把代码删掉了,还没备份 试着安装了一下GitHub Pull Requests,不会用 备份步骤 创建新工作区和测试文件还有GitHub项目 首先…

vscode 删除不用的ssh远程连接

使用vscode连接一个远程服务器发现联不通,但是使用mobaxterm是可以通的,最后原因发现是这个服务器ip与之前连过的另一台相同,和之前连接保存的信息冲突了 解决办法: 使用记事本打开这个路径下的known_hosts(最好备份一下)&#x…

Python代码打包成exe应用

目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 (1)首先,我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 (2)我们要先安装Pyinstalle…

第 5 章理解 ScrollView 并构建 Carousel UI

通过上一章的学习,我相信你现在应该明白如何使用堆栈构建复杂的 UI。当然,在你掌握 SwiftUI 之前,你还需要大量的练习。因此,在深入研究 ScrollView 以使视图可滚动之前,让我们先以一个挑战开始本章。你的任务是创建一个类似于图 1 所示的卡片视图。 …

HarmonyOS开发 - 日志打印

在程序开发过程中,日志输出是不可或缺的一部分。能有效的记录和分析日志数据,使开发人员可以更好地了解程序的运行状况、解决问题、优化性能并满足合规性要求等。 当程序出现错误或异常时,日志记录输出可以帮助开发人员快速定位问题发生的位置…

2024年最新通信安全员考试题库

61.架设架空光缆,可使用吊板作业的情况是()。 A.在2.2/7规格的电杆与墙壁之间的吊线上,吊线高度5m B.在2.2/7规格的墙壁与墙壁之间的吊线上,吊线高度6m C.在2.2/7规格的电杆与电杆之间的吊线上,吊线高度…

JAVA开发的一套医院绩效考核系统源码:KPI关键绩效指标的清晰归纳

KPI是关键绩效指标(Key Performance Indicators)的缩写,它是一种用于衡量员工或组织绩效的量化指标。这些指标通常与组织的目标和战略相关,并帮助管理层评估员工和组织的实际表现。KPI还可以为员工提供清晰的方向,使他…

ORBSLAM3_ROS_Ubuntu18_04环境搭建安装

orbslam3安装 ORB-SLAM3配置及安装教程(2023.3)_orbslam3安装-CSDN博客 换源,换成国内的 搜索software 安装工具 sudo apt install git sudo apt update sudo apt install gcc g cmake安装 cmake安装新版本 ubuntu20.04安装cmake详细…

《数据赋能:一本书讲透数字化营销与运营》—— 从正确的数据观开始

基于数据打通的“全链路”营销是当下的“时髦”,应用它的前提是什么?深度营销和运营的关键数据如何获得?如何利用数据进行更精准的营销投放?如何利用数据优化投放的效果?如何促进消费者的转化,以及激活留存…

分享一套基于SSM的九宫格日志网站(源码+文档+部署)

大家好,今天给大家分享一套基于SSM的九宫格日志网站 开发语言:Java 数据库:MySQL 技术:SpringSpringMvcMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 博主介绍: 一名Java全栈工程师,专注于Java全…

GPT-5:AI的博士时代与我们的未来

目录 引言第一部分:GPT-5技术突破预测1. NLP技术的革新1.1 算法进步对理解力提升的影响1.2 技术突破推动行业发展 2. 行业推动力2.1 教育行业的变革2.2 医疗行业的创新2.3 法律行业的效率提升 第二部分:智能系统与人类的协作1. 辅助决策的角色1.1 决策支…

基于JSP的沙县小吃点餐系统

开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:Eclipse、MySQL、WAMP服务器 系统展示 管理员…

探索 LLamaWorker:基于LLamaSharp的.NET本地大模型服务

LLamaWorker 是一个基于 LLamaSharp 项目开发的 HTTP API 服务器。它提供与 OpenAI 兼容的 API,使得开发者可以轻松地将大型语言模型(LLM)集成到自己的应用程序中。 1. 背景 在人工智能领域,大型语言模型(LLM&#xf…

【OpenCV 图像处理 Python版】图像处理的基本操作

文章目录 1.图像的 IO 操作1.1 图像读取 imread1.2 图像显示1.2.1 opencv 方式1.2.2 matplotlib 方式 1.3 图像保存 imwrite 2.绘制几何图形1. 绘制直线2. 绘制矩形3. 绘制圆形4. 绘制多边形5. 添加文字 3.获取并修改图像中的像素点3.1 获取像素值3.2 修改像素值3.3 获取和修改…

Chromium 调试指南2024 Mac篇 - 准备工作 (一)

1.引言 Chromium是一个由Google主导开发的开源浏览器项目,它为Google Chrome浏览器提供了基础框架。Chromium不仅是研究和开发现代浏览器技术的重要平台,还为众多其他基于Chromium的浏览器(如Microsoft Edge、Brave等)提供了基础…

利用MATLAB批量读取图像时出现名称排序错乱问题解决方法sort-nat函数

利用MATLAB批量读取图像时出现名称排序错乱问题解决方法sort-nat函数 一、问题描述二、解决方法 欢迎学习交流! 邮箱: z…1…6.com 网站: https://zephyrhours.github.io/ 一、问题描述 使用MATLAB批量读取图像文件,会发现提取出…

Redis-实战篇-缓存击穿问题及解决方案

文章目录 1、缓存击穿2、常见的解决方案有两种:2.1、互斥锁2.2、逻辑过期2.3、两种方案对比 3、利用互斥锁解决缓存击穿问题3.1、ShopServiceImpl.java3.2、使用 jmeter.bat 测试高并发 4、利用逻辑过期解决缓存击穿问题 1、缓存击穿 缓存击穿问题 也叫 热点key问题…

图形化用户界面-java头歌实训

图形化用户界面 import java.awt.*; import javax.swing.*; public class GraphicsTester extends JFrame { public GraphicsTester() { super("Graphics Demo"); setSize(480, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void paint…

Windows 10,11 Server 2022 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…

利用viztracer进行性能分析和优化

上一篇文章,我们详细讲解了scalene这个性能分析和优化工具的使用流程;今天,我们将深入探讨另一个性能分析和优化工具——viztracer。 什么是viztracer? viztracer是一个非常强大的分析器,可以生成详细的性能报告和可…