udp协议 服务器

1 TCP和UDP基本概念

TCP:(Transmission Control Protocol)是一种面向连接、可靠的基于字节流的传输层通信协议。并且提供了全双工通信,允许两个应用之间建立可靠的链接以进行数据交换

 udp:(User Datagram Protocol):是一种无链接、不可靠、基于数据报文传输层协议,他不提供数据包的分组排序和组装功能,也不提供可靠性的保证

2 udp协议特点

1 udp基于IP 的简单的协议,不可靠的协议
2 优点就是简单 轻量化  传输速度快,要求可靠性不太高
3 缺点:没有流量控制没有应答确认机制。不能解决丢包重发顺序问题 

3 udp使用的场景

当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时可以使用udp协议
例如语音和视频聊天。主要在这些场景如果丢了一两个数据包,不会产生太大的影响。

4 tcp和udp区别? 

1 TCP是基于连接的 而udp基于非链接的
2 tcp传输数据稳定可靠,适用于对网络通信质量要求高的场景,需要准确无误的发给对方,例如 传输文件 发送文件浏览网页。
3 udp优点是速度快,轻量级。但是有可能会产生丢包问题,所以适用于实时性要求较高的的但是对丢包没有要求太高场景
例如域名查询语音通话、视频直播等

服务器

搭建服务器页面

代码
       // 先讲socket进行客户端和服务器的书写
    Socket socket;
    private void button1_Click(object sender, EventArgs e)
    {
        //参数1 ip地址类型 ipv4的类型
        //参数2 传递数据类型 数据报文类型
        //参数3 协议类型 udp协议
        //1 创建socket套接字作为服务器对象
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        // 2绑定ip和端口
        IPAddress iPAddress = IPAddress.Parse(“端口号");
        socket.Bind(new IPEndPoint(iPAddress,8081));
       
       
        //3 接受消息
        startReceive();
    }
  
    void startReceive()
    {
        //创建线程 开启线程
        new Thread(() =>
        {
            byte[] body = new byte[1024];
            while (true)
            {
                
                int count =   socket.Receive(body); //接受数据
                string s = Encoding.UTF8.GetString(body, 0, count);
                richTextBox1.Invoke((Action)(() =>
                {
                    richTextBox1.AppendText(s + "\t\n");
                    richTextBox1.SelectionStart=richTextBox1.Text.Length;
                    richTextBox1.ScrollToCaret();
                }));
            }

        }).Start() ;
    }

    //发消息的方法 给指定的人发消息
    string[] ips = new string[] {"端口号",  };
    private void button2_Click(object sender, EventArgs e)
    {
        socket.SendTo(Encoding.UTF8.GetBytes(this.textBox1.Text),
            new IPEndPoint(IPAddress.Parse("端口号"), 8082)
            );
    }
}

客户端:

搭建界面

代码:
void f1()
{
    byte[] body = new byte[1024];
    while (true)
    {
        int count = socket.Receive(body); //接受数据
        string s = Encoding.UTF8.GetString(body, 0, count);
        richTextBox1.Invoke((Action)(() =>
        {
            richTextBox1.AppendText(s + "\t\n");
            richTextBox1.SelectionStart = richTextBox1.Text.Length;
            richTextBox1.ScrollToCaret();
        }));
    }
}
// 打开连接
Socket socket;
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        //1创建客户端对象
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        //bind 如果前后端写的端口一致的时候 出现错误,端口号只能使用一次
        //2 绑定ip和端口号
       socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8082));
        Thread th = new Thread(f1);
        th.Start();
    }
    catch (Exception ex)
    {
        MessageBox.Show("端口号被占用");
    }

}

//发送消息
private void button2_Click(object sender, EventArgs e)
{
  
    if (socket != null)
    {
      
        //参数1 发送的字符串转成字节数组
        //参数2 发送数据的远程终端 new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081)
        socket.SendTo(Encoding.UTF8.GetBytes("倒反天罡"), new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081));
   }
}

//关闭
private void button3_Click(object sender, EventArgs e)
{
    socket.Close();//关闭
    socket = null;
}

效果如下:

打开服务器,客户链接并发送消息

服务器向客户端发送消息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

websocket服务执行playwright测试

上一篇博客从源码层面分析了playwright vscode插件实现原理,在上一篇博客中提到,backend服务是一个websocket服务。这遍博客将介绍如何封装一个websocket服务,通过发送消息来执行playwright测试。 初始化项目 第一步是初始化项目和安装必要的…

​【VMware】VMware Workstation的安装

目录 🌞1. VMware Workstation是什么 🌞2. VMware Workstation的安装详情 🌼2.1 VMware Workstation的安装 🌼2.2 VMware Workstation的无限使用 🌞1. VMware Workstation是什么 VMware Workstation是一款由VMwar…

【K8s】专题六:Kubernetes 资源限制及服务质量等级

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、资源限制 1、基本介绍 2、工作原理 3、限制方法 二、服务质量等级 一、资源限制 1…

【软件测试入门】测试用例经典设计方法 — 因果图法

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂&am…

DIY灯光特效:霓虹灯动画制作教程

下面我们根据这张霓虹灯案例,教大家如何用智能动物霓虹灯闪烁的效果,大家可以根据思路,实现自己想要的动效效果,一起动手来做吧。 即时设计-可实时协作的专业 UI 设计工具 设置背景 新建画板尺寸为:800PX^600PX,设置背景色#120527。 绘制主题 输入自己喜欢文案,轮廓化,具体…

PHP-CGI的漏洞(CVE-2024-4577)

通过前两篇文章的铺垫,现在我们可以了解 CVE-2024-4577这个漏洞的原理 漏洞原理 CVE-2024-4577是CVE-2012-1823这个老漏洞的绕过,php cgi的老漏洞至今已经12年,具体可以参考我的另一个文档 简单来说,就是使用cgi模式运行的PHP&…

充电桩--充电桩智能化发展趋势

聚焦光伏产业、深耕储能市场、探究充电技术 小Q下午茶 相互交流学习储能和BMS相关内容 43篇原创内容 公众号 一、背景介绍 国家提出“新基建”以来,充电基础设施产业跃入人们的视线成为热门话题。充电基础设施作为充电网、车联网、能源网和物联网的连接器&…

JS对象、数组、字符串超详细方法

JavaScript 对象方法 对象创建的方式 对象字面量 var dog1 {name: "大黄",age: 2,speak: function () {console.log("汪汪");}, };使用Object构造函数 var dog2 new Object(); dog2.name "大黄"; dog2.age 2; dog2.speak function () …

卷积的通俗解释

以时间和空间两个维度分别理解卷积,先用文字来描述: 时间上,任何当前信号状态都是迄至当前所有信号状态的叠加;时间上,任何当前记忆状态都是迄至当前所有记忆状态的叠加;空间上,任何位置状态都…

初见:AntDB智能运维“三剑客“之ADC

引言 6月15日,PostgreSQL数据库技术峰会广州站圆满落幕。峰会上,亚信安慧数据库智能运维产品负责人李志龙介绍了AntDB的6大数据库引擎和3大工具产品能力。 这里的3大工具分别指: AntDB数据库迁移工具包 MTK 数据库智能运维平台 ACC AntDB数据…

SwiftUI 6.0(iOS 18/macOS 15)关于颜色 Color 的新玩法

概览 WWDC 2024 重装升级的 SwiftUI 6.0 让 Apple 不同平台(iOS 18/macOS 15)显得愈发的冰壶玉衡、美轮美奂。 之前梦寐以求的颜色混合功能在 WWDC 24 里终于美梦成真啦! 在本篇博文中,您将学到如下内容: 概览1. 梦想…

this.$prompt 提示框增加文本域并修改文本域高度

2024.06.24今天我学习了如何对提示框增加文本域的方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <script>methods:{reject_event(){this.$prompt(驳回内容, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputType: textarea,inputPlaceholder…

精益思想在机器人开发中的应用体现

精益思想源于制造业&#xff0c;旨在通过消除浪费、优化流程、持续改进来提升企业竞争力。在机器人开发中&#xff0c;精益思想同样具有指导意义。它要求开发团队在需求分析、设计、制造、测试等各个环节中&#xff0c;不断追求精益求精&#xff0c;力求在降低成本的同时提升产…

同元软控智能电动汽车数字化解决方案亮相CICV 2024

2024年6月18日-20日&#xff0c;由中国汽车工程学会、国家智能网联汽车创新中心、清华大学车辆与运载学院、清华大学智能绿色车辆与交通全国重点实验室举办的第十一届国际智能网联汽车技术年会&#xff08;CICV 2024&#xff09;在北京召开。苏州同元软控信息技术有限公司&…

C++并发之协程实例(四)(通过迭代器访问生成器序列)

目录 1 协程2 实例3 运行 1 协程 协程(Coroutines)是一个可以挂起执行以便稍后恢复的函数。协程是无堆栈的&#xff1a;它们通过返回到调用方来暂停执行&#xff0c;并且恢复执行所需的数据与堆栈分开存储。这允许异步执行的顺序代码&#xff08;例如&#xff0c;在没有显式回调…

【Linux】Centos升级到国产操作系统Openeuler

一、前言 迁移工具采用Openeuler官网提供的x2openEuler工具&#xff0c;是一款将源操作系统迁移到目标操作系统的迁移工具套件&#xff0c;具有批量化原地升级能力&#xff0c;当前支持将源 OS 升级至 openEuler 20.03。 官网链接&#xff1a;openEuler迁移专区 | 迁移专区首页…

8、MFC界面开发

界面开发 1、创建Ribbon样式的应用程序框架2、为Ribbon Bar添加控件2.1 下拉菜单2.2 添加消息处理函数 1、创建Ribbon样式的应用程序框架 创建MFC界面时选择样式为"Office"&#xff0c;然后再选择功能区。 2、为Ribbon Bar添加控件 Ribbon界面开发利用Ribbon Des…

lvs集群 Keepalived

Keepalived高可用集群 Keepalived概述 功能 LVS规则管理LVS集群真实服务器状态监测管理VIP Keepalived实现web高可用 安装keepalived软件 在webservers上配置 启动服务 webservers systemctl start keepalived.service ip a s | grep 192.168 #web1主机绑定vip 测试…

【gif制作】Win下视频生成GIF;工具GifCam单色保存,灰度保存,调速,编辑删除帧添加文本

下载地址 https://blog.bahraniapps.com/gifcam/#download https://gifcam.en.softonic.com/ 界面功能 GifCam 简洁、小巧的 gif 录制软件。GifCam就像照相机一样位于所有窗口的顶部&#xff0c;可以移动它并调整其大小录屏所需的区域。 如图&#xff1a;空闲状态下窗口内…

【uniapp】HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE

HBuilderx中uniapp项目运行到微信小程序报错Error: Fail to open IDE 问题描述 uniapp开发微信小程序&#xff0c;在HBuilderx中运行到微信开发者工具时报错Error: Fail to open IDE 解决方案 1. 查看微信开发者工具端服务端口是否开放 打开微信开发者工具选择&#xff1…