UDP通讯

本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点  这两种通讯方式不通的地方就是TCP是一对一通信  UDP是一对多的通信方式  接下来会一一讲解

UDP通信 主要的方向是一对多通信方式 UDP通信就是一下子可以通信多个对象,这就是UDP对比TCP的优势,UDP它的原理呢  就是开启服务端 然后客户端依次连接客户端  于TCP不同的是他不会一个一个跟客户端说而是跟微信群聊一样它在给这些客户端发送消息 它的缺点呢  服务端呢会发送消息给到客户端  但是有些客户端并不会接收到消息 或者没有看到消息  这样就是UDP的缺点 并不会保证全部人都能收到消息,就像老师在教室上课 老师在讲台上上课  总会有些同学低头玩手机 或者发呆 就会有人没有听到老师讲的知识,UDP对比于TCP的缺点,就是不能保证每一个人都能够接收到消息 ,但是优点就是可以一下子跟好多个对象进行通信,但是不能保证可靠度,以下由代码讲解:

服务端类代码:

package udp;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
//广播  先运行
public class Notification  extends Thread{String weather = "节目预报:八点有大型晚会,请收听";//发送消息int port = 9898;//端口号InetAddress iaddress = null;MulticastSocket socket = null;//多点广播套接字Notification(){try {iaddress = InetAddress.getByName("224.255.10.0");//地址socket = new MulticastSocket(port);//实例化多点广播套接字socket.setTimeToLive(1);//指定发送范围是本地网络socket.joinGroup(iaddress);//加入广播组}catch(IOException e){e.printStackTrace();//输出异常信息}}public void run(){//run方法while(true) {DatagramPacket packet = null;//数据包byte data[]=weather.getBytes();//字符串消息的字节数组packet =  new  DatagramPacket(data,data.length,iaddress,port);//将数据打包System.out.println(weather);//控制台打印消息try {socket.send(packet);//发送数据sleep(3000);//让线程休眠3000毫秒}catch(IOException e){e.printStackTrace();}catch(InterruptedException e) {e.printStackTrace();}}	}public static void main(String[]args) {Notification w =new Notification();w.start();//启动线程}
}

客户端类代码:

package udp;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
//接收  后运行
public class Receive extends JFrame implements Runnable, ActionListener {int port ;//端口InetAddress group =null;//广播组地址MulticastSocket socket = null;//多点广播套接字对象JButton inceBtn = new JButton("开始接收");JButton stopBtn = new JButton("停止接收");JTextArea inceAr = new JTextArea(10,10);//显示接收广播的文本域JTextArea inced = new JTextArea(10,10);Thread thread ;boolean stop = false;//定制接受信息状态public Receive () {setTitle("广播数据包");setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);thread = new Thread(this);inceBtn.addActionListener(this);//绑定按钮ince的单击事件stopBtn.addActionListener(this);//绑定按钮stop的单击事件inceAr.setForeground(Color.blue);//指定文本域中文字的颜色JPanel north = new JPanel();north.add(inceBtn);//将按钮添加到面板north上north.add(stopBtn);add(north,BorderLayout.NORTH);//将north放置在窗体的上部JPanel center = new JPanel();//创建面板对象centercenter.setLayout(new GridLayout(1,2));//设置面板布局center.add(inceAr);//将文本域添加到面板上center.add(inced);add(center,BorderLayout.CENTER);//设置面板的布局validate();//刷新port =9898;//设置端口号try {group = InetAddress.getByName("224.255.10.0");//指定接收地址socket = new MulticastSocket(port);//绑定多点广播套接字socket.joinGroup(group);//加入广播组}catch(IOException e){e.printStackTrace();//输出异常信息}setBounds(100,50,360,380);//设置布局setVisible(true);//将窗体设置为显示状态}public void run() {//run方法while (!stop) {byte data[] = new byte[1024];//创建缓存字节数组DatagramPacket packet = null;packet = new  DatagramPacket(data,data.length,group,port);//待接收的数据包try {socket.receive(packet);//接收数据包//获取数据包中的内容String message  = new String(packet.getData(),0,packet.getLength());inceAr.setText("正在接收的内容:\n"+message);//将接受内容显示在文本域中inced.append(message+"\n");//每条信息为一行}catch(IOException e ) {e.printStackTrace();//输出异常信息}}}public void actionPerformed(ActionEvent e) {//单机按钮ince出发时间if(e.getSource()==inceBtn) {inceBtn.setBackground(Color.red);//设置按钮颜色stopBtn.setBackground(Color.yellow);if(!(thread.isAlive())) {//如线程不处于“新建状态”thread = new Thread(this);//实例化Thread对象}thread.start();//启动线程stop = false;//开始接受信息}if(e.getSource()== stopBtn) {//单机按钮stop出发时间inceBtn.setBackground(Color.yellow);//设置按钮亚瑟stopBtn.setBackground(Color.red);stop = true;//停止接收信息}}public static void main(String[]args) {Receive rec = new Receive();rec.setSize(460,200);}
}

客户端和服务端代码图如下所示:

运行结果如下所示:

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

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

相关文章

股市复苏中的明懿金汇:抓住新机遇

2023年对于明懿金汇来说是充满挑战与机遇的一年。面对复杂多变的市场环境,明懿金汇展现了其对市场趋势的敏锐洞察和卓越的策略适应能力。以下是该公司在2023年的主要投资策略和市场适应方式的详细分析。 随着2023年中国股市迎来反弹,明懿金汇迅速调整了…

Day04 Liunx高级系统设计4-信号

进程间通讯 引入 如何将 A 进程中的数据传入 B 进程呢 ? 我们要使用进程间通讯 概述 中文名 : 进程间通讯 英文名 :IPC 英文全称 :Inter Processes Communication 作用: 数据传输:一个进程需要将他的数据发送给另一个进程】 资源共享:多个进程可以…

从文字到使用,一文读懂Kafka服务使用

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

C++入门第十一篇----多态

前言: 和前面的继承一样,多态也是对类和对象的功能进行扩展,以让其更加好用的一个知识点,接下来,就让我们总结一下多态,这个依托了继承的一个重要知识点。 对多态的理解和多态的概念: 何为多…

如何把数据变成资产,企业数据资产化实施路径三部曲

在数字化时代,数据已经成为一种重要的资产,企业和个人都希望能够将数据变现。但并不是所有的数据都是资产,如何成为资产是当下企业关心的问题。下面就让我们一起来了解一下企业数据资产化的三个关键步骤:数据资源化、资源产品化和…

学习SQL大概要多久?有没有好的资料或者视频推荐呢?

【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】 一、SQL认知 SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化语言。通过SQL,使用简单的关键词和语法来表达复杂的数…

C++新经典模板与泛型编程:用成员函数重载实现std::is_class

用成员函数重载实现is_class std::is_class功能,是一个C11标准中用于判断某个类型是否为一个类类型(但不是联合类型)的类模板。当时在讲解的时候并没有涉及std::is_class的实现代码,在这里实现一下。简单地书写一个IsClass类模板…

1.10 C语言之外部变量与作用域

1.10 C语言之外部变量与作用域 一、外部变量概述二、练习 一、外部变量概述 我们说,函数(不管是main函数还是其他函数)内部定义的变量,其作用范围都只在函数内部,我们把这些变量叫做自动变量或者局部变量。除了局部变…

[数据集][目标检测]拉横幅识别横幅检测数据集VOC+yolo格式1962张1类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1962 标注数量(xml文件个数):1962 标注数量(txt文件个数):1962 标注类别数&a…

网络机房的功能有哪些?

网络机房的功能主要包括: 信息存储和管理:机房作为信息系统的核心,需要提供可靠的存储和管理能力,包括服务器、存储设备、备份系统等硬件设备,以及数据备份、数据迁移、容灾等管理方法和技术。网络连接和通信&#xf…

C语言指针详解上

1 野指针 int main01(){//野指针就是没有初始化的指针,指针的指向是随机的,不可以 操作野指针//int a 0;//指针p保存的地址一定是定义过的(向系统申请过的)int *p;//野指针*p 200;printf("%d\n",*p);system("pause");return 0;}2 空指针 空指针的作用…

ubuntu18.04 vscode 安装 vue.volar Vue Language Features (Volar) , vue3 必备插件

直接在vscode 里面下载老是失败,不是网络问题,而是vue.volar插件配置的vscode版本与vscode版本不一致导致出现安装失败 官网下载最新的 vue.volar插件 https://marketplace.visualstudio.com/ 官网搜索 vue.volar 然后打开 Vue Language Features (Vol…