java网络编程之UDP协议
文章目录
- UDP简介
- 一发一收
- 客户端:
- 服务端:
- 多发多收
- 实现多开
- 客户端:
- 服务端
UDP简介
UDP(User Datagram Protocol)
DatagramSocket 用于创建客户端、服务端DatagramSocket() :创建客户端的Socket对象,系统随机分配一个端口
DatagramSocket(int port) : 创建服务端的Socket对象,指定端口号DatagramPacket(byte buf[], int length,InetAddress address, int port)
创建发出去的数据包参数解释:
byte buf[]:字节数组,用于接收数据
int length :数据的长度
InetAddress address 网址对象
int port 端口号DatagramPacket(byte buf[], int length)
创建用来接收的数据包
方法:
send(DatagramPacket p) //发数据
receive(DatagramPacket p) //接收数据
一发一收
要先启动服务端再启动客户端。
客户端:
public class Client {public static void main(String[] args) throws Exception {//创建客户端对象DatagramSocket socket = new DatagramSocket();/* public DatagramPacket(byte buf[], int length,InetAddress address, int port) */byte[] bytes = "客户端发送给了一个数据包".getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);socket.send(packet);System.out.println("客户端数据发送完毕");socket.close();//记得关闭,不然占用资源。}
}
服务端:
public class Server {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(6666);System.out.println("服务端启动");//创建一个数据包对象,用于接受数据byte[] buffer = new byte[1024 * 64];//数据包最大为64kDatagramPacket packet = new DatagramPacket(buffer,buffer.length);socket.receive(packet);int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println(rs);System.out.println("客户端的IP:"+packet.getAddress().getHostAddress());System.out.println("客户端的端口:"+packet.getPort());socket.close();}
}
多发多收
相比一收一发改进的地方:
- 实现多次发送自定义信息
- 输入stop 时候退出
实现多开
客户端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;public class Client {public static void main(String[] args) throws Exception {//创建客户端对象DatagramSocket socket = new DatagramSocket();/* public DatagramPacket(byte buf[], int length,InetAddress address, int port) */Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入数据:");String msg = sc.nextLine();if (msg.equals("stop")) {break;}byte[] bytes = msg.getBytes();DatagramPacket packet = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),6666);socket.send(packet);}System.out.println("感谢使用!!!");socket.close();}
}
服务端
服务端一般是不关闭的。
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Server {public static void main(String[] args) throws Exception {DatagramSocket socket = new DatagramSocket(6666);System.out.println("服务端启动");while (true) {//创建一个数据包对象,用于接受数据byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);socket.receive(packet);int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println(rs);System.out.println("客户端的IP:"+packet.getAddress().getHostAddress());System.out.println("客户端的端口:"+packet.getPort());}
// socket.close();}
}
相关文章:

java网络编程之UDP协议
文章目录 UDP简介一发一收客户端:服务端: 多发多收实现多开客户端:服务端 UDP简介 UDP(User Datagram Protocol) DatagramSocket 用于创建客户端、服务端DatagramSocket() :创建客户端的Socket对象,系统随…...

几百封钓鱼邮件如何分析?一个简单的方法告诉你!
前几天的时候收到一批钓鱼邮件需要分析,打开一看就傻了眼,大概有几百封,而且基本上每一封都是钓鱼邮件,第一反应是很崩溃,这么多如何分析?但是客户那边又着急要,那只能先上了: 一、…...

【设计原则篇】聊聊开闭原则
开闭原则 其实就是对修改关闭,对拓展开放。 是什么 OCP(Open/Closed Principle)- 开闭原则。关于开发封闭原则,其核心的思想是:模块是可扩展的,而不可修改的。也就是说,对扩展是开放的…...
LVS面试题
LVS 原理 LVS通过工作于内核的ipvs模块来实现功能,其主要工作于netfilter 的INPUT链上。 而用户需要对ipvs进行操作配置则需要使用ipvsadm这个工具。 ipvsadm主要用于设置lvs模型、调度方式以及指定后端主机。 简述 LVS 三种工作模式,他们的区别 基于 NAT 的 LVS…...

uniapp发行web页面在老版本浏览器打开一片空白
uniapp发行的web页面(菜单->发行->网站-PC Web或手机H5),对于一些老的浏览器(或内核),打开一片空白; 而在新版本的浏览器中打开却正常。这是因为那些版本较低的浏览器不支持ES6的语法和新…...

数据结构—二叉树的模拟实现(c语言)
目录 一.前言 二.模拟实现链式结构的二叉树 2.1二叉树的底层结构 2.2通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 2.3二叉树的销毁 2.4二叉树查找值为x的节点 2.5二叉树节点个数 2.6二叉树叶子节点个数 2.7二叉树第k层节点个数 三.二叉树的遍历 3.1…...
COCO数据集下载
文章目录 COCO官网貌似全部失效百度网盘提取码一直是1152 COCO官网 官网下载 train2017.zip annotations_trainval2017.zip val2017.zip stuff_annotations_trainval2017.zip test2017.zip image_info_test2017.zip 貌似全部失效 百度网盘提取码一直是1152 stuff_annotatio…...

基于安卓android微信小程序的校园互助平台
项目介绍 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…...
Spring整合Junit(4、5)
在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context new classPathXmlApplicationContext("xxx.xm"); XXXX XXX context.getBean(Xxxx.cTass); 这两行代码的作用是创建Spring容器,最终获取到对象,但是每…...

Linux 程序开发流程 / 基本开发工具 / Vim / GCC工具链 / Make 工具 / Makefile 模板
编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程…...

2023.11.13【读书笔记】丨生物信息学与功能基因组学(第六章 多重序列比对 下)
目录 6.4 多重序列比对数据库6.5 基因组区域的多重序列比对6.6 展望6.7 常见问题总结 6.4 多重序列比对数据库 Pfam:基于谱隐马尔可夫模型构建的蛋白质家族数据库 SMART:简易分子构型研究工具,与细胞信号传导、细胞外结构域以及染色质功能…...

【vue】虚拟dom的原理是什么?手写实现虚拟dom !
1.虚拟dom的原理 虚拟 DOM 是对 DOM 的抽象,本质上就是用 JavaScript 对象来描述 DOM 结构。Vue.js 中关于虚拟 DOM 的实现主要进行了以下几个步骤: 1.生成虚拟 DOM: Vue.js 使用 render 函数来依据模板代码生成虚拟 DOM。在这个过程中&a…...

CentOS 7 双网卡绑定热备 —— 筑梦之路
为什么需要? 1. 增强网络的可靠性 2. 保障服务的可持续性 3. 降低网卡故障带来的不良影响 有哪些模式? 模式0:轮询策略(round robin),mode0,优点:流量提高一倍缺点:需要接…...
Qt绘制简单图表
Qt图表类似于model/view,chart就是model。 创建图表的各个部件: QChart *chart new QChart();chart->setTitle(tr("简单函数曲线")); // chart->setAcceptHoverEvents(true);ui->chartView->setChart(chart);ui->chartVi…...

CCLink转Modbus TCP网关_MODBUS网口设置
兴达易控CCLink转Modbus TCP网关是一种用于连接CCLink网络和Modbus TCP网络的设备。它提供了简单易用的MODBUS网口设置,可以帮助用户轻松地配置和管理网络连接 1 、网关做为MODBUS主站 (1)将电脑用网线连接至网关的P3网口上。 (…...

Vux购物车案例
一、综合案例 - 创建项目 本案例主要针对Vuex共享数据的练习以及父子组件数据的共享。 脚手架新建项目 (注意:勾选vuex) 版本说明: vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo将原本src内容清空,替换…...

浅析网络协议-HTTP协议
1.HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图…...

启动Docker服务后显示Docker Engine stopped
1、重新启动Docker服务:打开Windows服务管理器(可以在开始菜单中搜索),找到"Docker Desktop Service"或类似命名的服务,右键单击并选择"重启"。稍等片刻,看看是否重新启动成功 2、尝试…...

Centos7 升级到 Centos8 教程以及关于dnf包管理工具的若干问题解决方案
目录 为什么升级一、参考文档二、升级步骤三、安装git编码错误缓存问题安装git依赖冲突问题解决办法 为什么升级 jenkins 2.4版本需要CentOS8 一、参考文档 点我 二、升级步骤 1.安装epel源 yum -y install epel-release2.安装rpmconf和yum-utils yum -y install rpmco…...

计算机网络技术(一)
深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网(互联网)与因特网的区别与关系 如图所示࿰…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...