Java高级Day37-UDP网络编程

2024-09-07 07:28
文章标签 java 编程 udp 网络 高级 day37

本文主要是介绍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网络编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144437

相关文章

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp