当前位置: 首页 > news >正文

Java高级Day37-UDP网络编程

109.netstat指令

  1. netstat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况

  2. netstat -an|more 可以分页显示

  3. 要求在dos控制台下执行

说明:

  1. LISTENING表示某个端口在监听

  2. 如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息

  3. ctrl + c 退出指令

110.TCP连接秘密

1.当客户端连接到服务器后,实际上客户端也是通过一个端口的服务端进行通讯的,这个端口是TCP/IP来分配的,不确定的,随机的

2.示意图

3.程序验证

111.UDP网络通信编程

基本信息

  1. 类 DatagramSocket和 DatagramPacket[数据报/数据包] 实现了基于UDP 协议网络程序

  2. UDP数据通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达

  3. DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号

  4. UDP协议中每隔数据报都给出了完整的地址信息,因此无需建立发送方和接收方的连接

基本流程

  1. 核心的两个类/对象 DatagramSocket与DatagramPacket

  2. 建立发送端,接收端(没有服务端和客户端概念)

  3. 发送数据前,建立数据包/报 DatagramPacket对象

  4. 调用DatagramSocket的发送,接收方法

  5. 关闭DatagramSocket

UDP说明:

  1. 没有明确的服务端和客户端,演变成数据的发送端和接收端

  2. 接收数据和发送数据是通过 DatagramSocket 对象完成

  3. 将数据封装到 DatagramPacket 对象/包装

  4. 当接收到 DatagramPacket 对象,需要进行拆包,取出数据

  5. DatagramSocket 可以指定在哪个端口接收数据

应用案例:

//1.编写一个接收端A和一个发送端B
//2.接收端A在9999端口等待接收数据(receive)
//3.发送端A向接收端B 发送数据“hello,明天吃火锅~”
//4.接收端B接收到发送端A发送的数据,回复“好的,明天见”再退出
//5.发送端接收回复的数据,再退出
​
===============//ReceiverA//===============
public class UDPReceiverA {public static void main(String[] args) throws Exception {//1.创建一个DatagramSocket对象,准备在9999端口接收数据DatagramSocket socket = new DatagramSocket(9999);//2.构造一个 DatagramPacket对象//  一个数据包,最大是64kbyte[] buf = new byte[64 * 1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);//3.调用 接受方法,将通过网络传输的 DatagramPacket对象填充到packet对象//  当有数据包发送到9999端口时,就会接收到数据,如果没有数据包发送到,就会阻塞等待System.out.println("接收端A 等待接收数据..");socket.receive(packet);//4.可以把packet进行拆包,取出数据,并显示int length = packet.getLength();//实际接收到的数据字节长度byte[] data = packet.getData();//接收到数据String s = new String(data, 0, length);System.out.println(s);//==回复信息给B端//将需要发送的数据,封装到DatagramPacket对象data = "好的,明天见".getBytes();//封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(),9998);socket.send(packet);//发送//5.关闭资源socket.close();}
}
​
​
​
===============//SenderB//===============
public class UDPSenderB {public static void main(String[] args) throws Exception {//1.创建 DatagreamSocket 对象,准备在9998端口 接收数据DatagramSocket socket = new DatagramSocket(9998);//同一个机器没有两个相同的端口,所以用9998//2.将需要发送的数据,封装到DatagramPacket对象byte[] data = "hello 明天吃火锅~".getBytes();//封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(),9999);socket.send(packet);//3.==接收从A端回复的信息//  (1)构造一个 DatagramPacket对象//  一个数据包,最大是64kbyte[] buf = new byte[64 * 1024];packet = new DatagramPacket(buf, buf.length);//  (2)调用 接受方法,将通过网络传输的 DatagramPacket对象填充到packet对象//  当有数据包发送到9998端口时,就会接收到数据,如果没有数据包发送到,就会阻塞等待socket.receive(packet);//  (3)可以把packet进行拆包,取出数据,并显示int length = packet.getLength();//实际接收到的数据字节长度data = packet.getData();//接收到数据String s = new String(data, 0, length);System.out.println(s);//关闭资源socket.close();System.out.println("B端退出");}
}  

相关文章:

Java高级Day37-UDP网络编程

109.netstat指令 netstat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况 netstat -an|more 可以分页显示 要求在dos控制台下执行 说明: LISTENING表示某个端口在监听 如果有一个外部程序(客户端)连接到该端口…...

如何利用ChatGPT提升学术论文讨论部分的撰写质量和效率

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。经过数月爆肝,终于完成学术AI使用教…...

谷歌seo网址如何快速被收录?

想让你的网站快速被搜索引擎收录,可以采取几种不同的策略。首先,确保你的网站内容丰富、有价值,搜索引擎更喜欢收录内容质量高的网站。同时,增强网站的外链建设,做好这些站内优化,接下来就是通过谷歌搜索控…...

自动驾驶---什么是Frenet坐标系?

1 背景 为什么提出Frenet坐标系?Frenet坐标系的提出主要是为了解决自动驾驶系统在路径规划的问题,它基于以下几个原因: 符合人类的驾驶习惯: 人类驾驶员在驾驶过程中,通常不会关心自己距离起点的横向和纵向距离&#x…...

如何编写Linux PCI设备驱动器 之一

如何编写Linux PCI设备驱动器 之一 PCI寻址PCI驱动器使用的APIpci_register_driver()pci_driver结构pci_device_id结构 如何查找PCI设备存取PCI配置空间读配置空间APIs写配置空间APIswhere的常量值共用部分类型0类型1 PCI总线通过使用比ISA更高的时钟速率来实现更好的性能&…...

梯度弥散问题及解决方法

梯度弥散问题及解决方法 简要阐述梯度弥散发生的原因以及现象针对不同发生原因有什么解决方案1. 使用ReLU及其变体激活函数2. 权重初始化3. 批量归一化(Batch Normalization)4. 残差连接(Residual Connections)5. 梯度裁剪(Gradient Clipping)简要阐述梯度弥散发生的原因…...

Python中pickle文件操作及案例-学习篇

一、简介 Pickle 算是Python的一种数据序列化方法,它能够将对象转换为字节流,进而可以保存到文件中或通过网络传输给其他Python程序。这种方式非常适合快速简便地保存复杂的数据结构,例如列表、字典、自定义对象等。 二、pickle文件的读写 …...

微服务日常总结

1.当我们在开发中,需要连接多个库时,可以在yml中进行配置。 当在查询的时候,跨库时,需要通过DS 注解来指定,需要yml配置需要保持一致。 2. 当我们想把数据存入到clob类型中,需要再字段 的占位符后面加上j…...

C和C++内存管理

C和C内存管理 (一)C/C内存分布(二)C语言动态内存管理(三)c内存管理(3.1)new/delete操作内置类型(3.2)new和delete操作自定义类型 (四)…...

axios取消请求

1.使用CancelToken: class RequestHttp {service: AxiosInstance;public constructor(config: AxiosRequestConfig) {// 实例化axiosthis.service axios.create(config);/*** description 请求拦截器* 客户端发送请求 -> [请求拦截器] -> 服务器*/this.service.interce…...

阿里中间件——diamond

一、前言 最近工作不忙闲来无事,仔细分析了公司整个项目架构,发现用到了很多阿里巴巴集团开源的框架,今天要介绍的是中间件diamond. 二、diamond学习笔记 1、diamond简介 diamond是一个管理持久配置(持久配置是指配置数据会持久化…...

pyenv -- 一款macos下开源的多版本python环境安装管理工具 国内加速版安装 + 项目venv虚拟环境 pip加速 使用与总结

一个比较方便实用的python多版本环境安装管理工具, 阿里云加速版本 pyenv安装方法: 直接克隆本下面到你的本地目录,然后设置环境变量即可 git clone https://gitee.com/tekintian/pyenv.git ~/.pyenv 环境变量配置 在~/.bash_profile 或者 .zshrc 中增加环境变量 export …...

VitePress 自定义 CSS 指南

VitePress 是一款基于 Vite 和 Vue 3 的静态网站生成器,专为文档编写而设计。尽管 VitePress 提供了丰富的默认主题,但在某些情况下,我们可能需要对其进行更深入的定制以满足特定的视觉需求。本文将详细介绍如何通过覆盖根级别的 CSS 变量来自…...

【舍入,取整,取小数,取余数丨Excel 函数】

数学函数 1、Round函数 Roundup函数 Rounddown函数 取整:(Int /Trunc)其他舍入函数: 2、Mod函数用Mod函数提取小数用Mod函数 分奇偶通过身份证号码判断性别 1、Round函数 Roundup函数 Rounddown函数 Round(数字,保留几位小数)(四…...

无线信道中ph和ph^2的场景

使用 p h ph ph的情况: Rayleigh 分布的随机变量可以通过两个独立且相同分布的零均值、高斯分布的随机变量表示。设两个高斯随机变量为 X ∼ N ( 0 , σ 2 ) X \sim \mathcal{N}(0, \sigma^2) X∼N(0,σ2)和 Y ∼ N ( 0 , σ 2 ) Y \sim \mathcal{N}(0, \sigma^2)…...

HCIA--实验五:静态路由综合实验

静态路由综合实验 一、实验内容: 1.需求/目的: 在ensp模拟器中使用四个路由器,并且在路由器上创建loopback接口,相当于连接了一台主机,通过配置静态路由的方式实现全网通。 二、实验过程 1.道具: 4个…...

不同vlan之间的通信方法

1.通过路由器的物理接口 1.给PC1,PC2配置IP地址,网关2.进入交换机配置vlan,交换机所有口都配置access口并绑定vlan3.配置路由器,进入路由器的两个接口配置网关IP和掩码缺点:成本高,每增加一个vlan就需要一个物理端口和…...

java后端框架

框架就是对技术的封装。 本篇博客小博主首先对以后我们要学习的框架进行简单概述,使大家对框架有一定的基本概念。 一.mybatis mybatis就是对jdbc(数据库连接)进行封装,避免了jdbc中手动设置参数,手动映射结果的操作。…...

如何在Word中插入复选框

如何在Word中插入复选框:详细教程与技巧 在Word中插入复选框是一项非常实用的技巧,尤其是在制作问卷调查、待办事项清单、交互式表单或文档中需要用户进行选择时,复选框不仅能提高文档的功能性,还能显得更加专业。本文将详细讲解…...

Android 源码中jni项目 加载so目录小结

Android 源码中jni项目 加载so目录小结 文章目录 Android 源码中jni项目 加载so目录小结一、前言二、so目录验证测试1、jni so文件错误报错(1)报错1 - 未找到so文件:(2)报错2 - so文件中未找到native方法: …...

Hudi 生产问题排障-乱序Upsert入湖数据丢失

一、背景与问题在大数据流式处理领域,乱序一直是一个无法越过的问题,如何正确处理乱序数据也是流式组件不断努力优化的方向,比如FLink提供的watermark机制(forBoundedOutOfOrderness/allowedLateness/sideOutputLateData&#xff…...

GLM-OCR系统资源优化:C盘清理与显存高效利用技巧

GLM-OCR系统资源优化:C盘清理与显存高效利用技巧 你是不是也遇到过这种情况:兴致勃勃地部署好GLM-OCR,准备大展身手,结果没跑几天,系统就弹窗提示“C盘空间不足”,或者程序运行越来越慢,甚至直…...

Steam美区支付实战:巧用虚拟VISA与PayPal组合策略,解锁游戏购买与礼品卡赠送

1. Steam美区支付的核心痛点与解决方案 很多玩家都遇到过这样的问题:好不容易注册了美区Steam账号,却发现国内的信用卡根本无法完成支付。我自己刚开始折腾美区账号时,也在这个环节卡了整整两周。Steam的风控机制确实严格得令人头疼&#xff…...

宇树A1电机折腾笔记

文章目录电脑SDK控制变态的硬件接线环境配置下位机直接控制上图就是笨笨的宇树A1,这是我目前为止转过的最难转的电机。电机的说明书、SDK链接都来自MATH-286-Pro的视频提供:宇树A1相关资料、宇树官方SDK仓库。这篇笔记分两部分,先使用SDK驱动…...

OpenClaw学术利器:Qwen3.5-9B辅助论文阅读与笔记整理

OpenClaw学术利器:Qwen3.5-9B辅助论文阅读与笔记整理 1. 为什么需要AI辅助学术研究 作为一名经常需要阅读大量文献的研究者,我长期被三个问题困扰:文献管理混乱、关键信息提取效率低下、笔记难以结构化。传统工具如Zotero或EndNote虽然能解…...

PCIe新手必看:3层体系结构详解(附实战避坑指南)

PCIe三层体系结构深度解析:从原理到实战避坑指南 刚接触PCIe总线的工程师们,常常会被其复杂的协议栈和晦涩的专业术语所困扰。作为现代计算机系统中至关重要的高速串行总线标准,PCIe凭借其分层架构设计,在保证兼容性的同时实现了性…...

ddsad

sdsfdjsufhfsuh...

告别龟速迭代!用埃特金算法2步搞定方程求根(附C++代码实战)

告别龟速迭代!用埃特金算法2步搞定方程求根(附C代码实战) 在数值计算的世界里,求解非线性方程根就像一场与时间的赛跑。工程师们常常被困在缓慢收敛的迭代法中,眼看着计算资源被一点点消耗,而精度提升却如同…...

百度飞桨PaddleOCR图片印章检测技术简介

百度飞桨PaddleOCR图片印章检测技术简介 全文链接 百度飞桨PaddleOCR图片印章检测技术简介 github仓库:使用PaddleOCR识别图片红色印章文字 red-seal-ocr 3.X和2.X区别较大,建议使用3.X版本。 PaddleX简介 PaddleX github地址PaddleX模型产线使用概览…...

RS485接口EMC设计要点与工程实践

1. RS485接口电路设计概述RS485作为一种常见的工业通信接口,广泛应用于设备间的数据传输。在实际工程应用中,我发现很多工程师只关注通信功能实现,却忽视了关键的EMC设计,导致产品在测试或现场应用中出现各种问题。我曾参与过一款…...