【DAY23】

文章目录

    • 【DAY23】
      • 一.网络编程
        • 1)三要素
        • 1.1)IP
        • InetAddress类的使用
        • 1.2)端口号
        • 1.3)协议
        • 2.1)UDP协议发送数据
        • 2.2)UDP协议接收数据
        • 2.3)UDP的三种通信方式
        • 3.1)TCP协议的发送和接收
        • 3.2)中文乱码问题
        • 3.3)三次握手四次挥手
      • 二.反射
        • 1)概述
        • 2)获取class对象的三种方式
        • 3)反射获取构造方法
        • 4)反射获取成员变量
        • 5)反射获取成员方法
      • 三.动态代理

一.网络编程

在通信协议下不同计算机上运行的程序,进行的数据传输

应用场景:计算机跟计算机之间通过网络

Java中使用java.net包下的技术轻松开发出常见的网络应用程序

常见的软件架构

  • CS:Client/Server 在用户本地需要下载并安装客户端程序,在远程有一个服务端程序 eg:QQ
    • 优点:画面精美,用户体验好
    • 缺点:需要开发客户端也需要开发服务端。用户需要下载和更新
  • BS:Browser/Server 只需要一个浏览器,用户通过不同网址,客户访问不同的服务器 eg:淘宝
    • 优点:不需要开发客户端,只需要页面+服务端,用户不需要下载打卡浏览器就能使用
    • 缺点:如果应用过大,用户体验受到影响
1)三要素

IP:设备在网络中的地址,是唯一的表示

端口号:应用程序在设备中的唯一表示

协议:数据在网络中传输的规则,常见的协议有UDP,TCP,http,ftp

1.1)IP

互联网协议地址,上网设备在网络中的地址是分配给上网设备的数字标签

分类

  1. IPv4互联网通信协议第四版

    采用32位地址长度,分为4组,最多只有2^32个IP,2019年11.26全部分配完毕

    可以用局域网解决IP不够的问题

    在这里插入图片描述

  2. IPv6互联网通信协议第六版

    采用128位地址长度,分为8组 ,最多有2^128个IP

在这里插入图片描述

IPv4的细节

1.分类:公网地址(万维网使用)和私有地址(区域网使用)

192.168开头的就是私有地址,范围为192.168.0.0—192.168.255.255,专门为组织机构内部使用

2.特殊IP地址:127.0.0.1,也可以是localhost:是回送地址也称本地回送地址,也称本机IP,永远只会寻找当前所在本机

常用的CMD

  • ipconfig:查看本机IP地址
  • ping:检查网络是否连通
InetAddress类的使用

表示IP地址

方法说明
static InetAddress getByName(String host)确定主机名称的IP地址,主机名称可以是机器名称也可以是IP地址
String getHostName()获取此IP地址的主机名
String getHostAddress()返回文本显示的IP地址字符串
public class t1 {public static void main(String[] args) throws UnknownHostException {//1.获取InetAddress的对象InetAddress address = InetAddress.getByName("LAPTOP-K3EOH2DK");//"设备名"System.out.println(address);//LAPTOP-K3EOH2DK/192.168.1.32String name = address.getHostName();System.out.println(name);//LAPTOP-K3EOH2DKString ip = address.getHostAddress();System.out.println(ip);//192.168.1.32}
}
1.2)端口号

应用程序在设备中唯一的标识

有两个字节表示的整数,取值范围:065535,其中01023之间的端口号用于一些知名的网络访问或者应用

一个端口号只能被一个应用程序使用

1.3)协议

计算机网络中连接和通信的规则被称为网络通信协议

  • OSI参考模型:世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广
  • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准

在这里插入图片描述

在这里插入图片描述

UDP协议

  • 用户数据报协议
  • UDP是面向无连接通信协议,速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

TCP协议

  • 传输控制协议
  • TCP是面向连接通信协议,速度慢,没有大小限制,数据安全
2.1)UDP协议发送数据

在这里插入图片描述

public class t1 {public static void main(String[] args) throws IOException {//1.创建对象//绑定端口号,通过这个端口往外发送//空参:所有可能的端口中随机一个进行使用//有参:指定端口号进行绑定DatagramSocket ds = new DatagramSocket();//2.打包数据String str = "你好你好你好你好你好";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("192.168.1.32");int port = 10086;//端口号DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ds.send(dp);//4.释放数据ds.close();}
}
2.2)UDP协议接收数据

在这里插入图片描述

public class T2 {public static void main(String[] args) throws IOException {//1.创建DatagramSocketDatagramSocket ds = new DatagramSocket(10086);//2.接收数据包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);ds.receive(dp);//3.解析数据包byte[] data = dp.getData();int len = dp.getLength();InetAddress address = dp.getAddress();int port = dp.getPort();System.out.println("接收到数据" + new String(data,0,len));System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个接口发出的");//4.释放数据ds.close();}
}

先运行接收端再运行发送端

2.3)UDP的三种通信方式
  1. 单播

    一对一

  2. 组播

    一对组

    组播地址:224.0.0.0~239.255.255.255 其中224.0.0.0~224.0.0.255为预留的组播地址

  3. 广播

    一对局域网中的所有设备

    广播地址:255.255.255.255

组播

public class t1 {public static void main(String[] args) throws IOException {//组播//1.创建对象MulticastSocket ms = new MulticastSocket();//2.打包数据String str = "你好你好你好你好你好";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("224.0.0.1");int port = 10000;//端口号DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ms.send(dp);//4.释放数据ms.close();}
}
public class T2 {public static void main(String[] args) throws IOException {//1.创建对象MulticastSocket ms = new MulticastSocket(10000);//2.将当前本机添加到224.0.0.1的这一组中InetAddress adress = InetAddress.getByName("224.0.0.1");ms.joinGroup(adress);//3.接收数据包byte[] bytes = new byte[1024];DatagramPacket dp = new DatagramPacket(bytes, bytes.length);ms.receive(dp);//4.解析数据包byte[] data = dp.getData();int len = dp.getLength();InetAddress address = dp.getAddress();int port = dp.getPort();System.out.println("接收到数据" + new String(data,0,len));System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个接口发出的");//5.释放数据ms.close();}
}

广播

public class t1 {public static void main(String[] args) throws IOException {//组播//1.创建对象MulticastSocket ms = new MulticastSocket();//2.打包数据String str = "你好你好你好你好你好";byte[] bytes = str.getBytes();InetAddress address = InetAddress.getByName("255.255.255.255");int port = 10000;//端口号DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);//3.发送数据ms.send(dp);//4.释放数据ms.close();}
}
3.1)TCP协议的发送和接收

在这里插入图片描述

客户端

  1. 创建客户端的对象Socket对象(Socket)与自动服务器端连接

    Socket(String host,int port)

  2. 获取输出流,写数据

    OutputStream getOutputStream()

  3. 释放数据

    void close()

服务器

  1. 创建服务器端的Socket对象(ServerSocket)

    ServerSocket(int port)

  2. 监听客户端连接,返回一个Socket对象

    Socket accept()

  3. 获取输入流,读数据,并把数据显示在控制台

    InputStream getInputStream()

  4. 释放资源

    void close()

客户端

public class t1 {public static void main(String[] args) throws IOException {//1.创建对象Socket socket = new Socket("192.168.1.32",10086);//2.从连接通道中获取输出流OutputStream os = socket.getOutputStream();//写出数据os.write("你好你好你好你好你好".getBytes());//3.释放数据os.close();socket.close();}
}

服务端

public class T2 {public static void main(String[] args) throws IOException {//1.创建对象ServerSocket ss = new ServerSocket(10086);//2.监听客户端的连接Socket socket = ss.accept();//3.从连接通道中获取输入流读取数据InputStream is = socket.getInputStream();int b;while((b = is.read()) != -1) {System.out.println((char)b);}//4.释放资源socket.close();ss.close();}
}
3.2)中文乱码问题

乱码原因:一个中文三个字节,InputStream字节流一个一个字节读所有造成乱码

解决方法:用转换流把字节流转换为字符流

public class T2 {public static void main(String[] args) throws IOException {//1.创建对象ServerSocket ss = new ServerSocket(10086);//2.监听客户端的连接Socket socket = ss.accept();//3.从连接通道中获取输入流读取数据InputStream is = socket.getInputStream();InputStreamReader isr = new InputStreamReader(is);int b;while((b = isr.read()) != -1) {System.out.print((char)b);}//4.释放资源isr.close()socket.close();ss.close();}
}
3.3)三次握手四次挥手

在这里插入图片描述

在这里插入图片描述

二.反射

1)概述

反射允许对封装类的字段,方法和构造函数的信息进行编程访问

在这里插入图片描述

2)获取class对象的三种方式
  1. Class.forName(“全类名”);

    最常用

  2. 类名.class

    一般更多是当做参数进行传递

  3. 类名.getClass();

    当已经有了这个类的对象时才能使用

public class t1 {public static void main(String[] args) throws IOException, ClassNotFoundException {//1.法一//全类名:包名 + 类名Class clazz1 = Class.forName("T1.Student");//2.法二Class clazz2 = Student.class;//3.法三Student s = new Student();Class clazz3 = s.getClass();}
}
3)反射获取构造方法

在这里插入图片描述

在这里插入图片描述

public class t1 {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException {//1.获取class字节码文件对象Class clazz = Class.forName("T1.Student");//2.获取构造方法Constructor[] cons = clazz.getConstructors();for (Constructor con : cons) {System.out.println(con);}Constructor[] cons2 = clazz.getDeclaredConstructors();for (Constructor con2 : cons2) {System.out.println(con2);}//获取单个Constructor con1 = clazz.getDeclaredConstructor();System.out.println(con1);Constructor con2 = clazz.getDeclaredConstructor(String.class);System.out.println(con2);}
}
4)反射获取成员变量

在这里插入图片描述

public class t1 {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, NoSuchFieldException {//1.获取class字节码文件对象Class clazz = Class.forName("T1.Student");//2.获取成员变量Field[] fields = clazz.getFields();for (Field field : fields) {System.out.println(field);}Field[] fields2 = clazz.getDeclaredFields();for (Field field2 : fields2) {System.out.println(field2);}//获取单个Field name = clazz.getDeclaredField("name");//获取权限修饰符int modifiers = name.getModifiers();System.out.println(modifiers);}
}
5)反射获取成员方法

在这里插入图片描述

三.动态代理

特点:无侵入式的给代码增加额外的功能

为什么需要代理对象如果要干的事情太多可以通过代理转移部分职责

代理长什么样对象有什么方法想被代理,代理就一定要有相应的方法

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【Zephyr】Window下的Zephyr编译和使用

工具下载 参考文档(Getting Started Guide — Zephyr Project Documentation)中介绍,可以直接通过winget下载: winget download Kitware.CMake Ninja-build.Ninja oss-winget.gperf python Git.Git oss-winget.dtc wget 7zip.7z…

图论(BFS)构造邻接表(运用队列实现搜索)

码蹄集OJ-夏日漫步 #include<bits/stdc.h> using namespace std; int n; int a[200010],dis[200010],qaq[1000010]; vector<int>son[200010]; int que[200010]; int main( ) {memset(qaq,-1,sizeof(qaq));memset(dis,-1,sizeof(dis));cin>>n;for(int i1;i…

vue怎么实现导入excel表功能

<el-uploadref"upload":action"aaa":on-change"importProject"name"excelFile"multiple:auto-upload"false":show-file-list"false"><el-button type"warning">导入</el-button><…

Linux DNS解析3 -- DNS解析代理配置使用

当网关设备配置了 /etc/hosts 文件时&#xff0c;确实可以为终端设备提供自定义DNS解析功能&#xff0c;但具体效果取决于网关的DNS代理服务配置。下面详细解释其工作原理和限制&#xff1a; 一、/etc/hosts 文件的作用 /etc/hosts 是本地静态域名解析文件&#xff0c;格式为&a…

历史版本的vscode下载地址

我有点厌恶vscode越来越臃肿的体积&#xff0c;也不需要层出不穷的新功能&#xff0c;于是网上找寻历史版本。 首先是这个页面&#xff1a;https://code.visualstudio.com/updates &#xff0c;但最多只显示两年&#xff0c;更早的就要手工修改地址栏&#xff0c;我试了最早的…

如何规范化项目执行

要实现项目执行的规范化&#xff0c;应做到以下几点&#xff1a;制定详细的项目执行计划、明确项目团队角色职责、建立高效沟通与协调机制、实施全面的质量与风险管理、采用合适的项目管理工具。其中&#xff0c;尤其重要的是明确项目团队角色职责&#xff0c;通过构建清晰的责…

【Rust异步】async和await异步编程实战:高并发任务处理全解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

在Linux上使用DuckCP实现从csv文件汇总数据到SQLite数据库的表

从pypi网站Duckcp页面下载duckcp-0.1.1-py3-none-any.whl 一开始用的Python 3.11.2环境。 继续沿用上文打补丁的方法&#xff0c;得到一个支持python3.11.1的安装包。 因为缺少zip压缩工具&#xff0c;使用python程序来完成对修改后文件的重新压缩。 import os import zipfile…

基于深度学习的图像分类:使用EfficientNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务&#xff0c;其目标是将输入的图像分配到预定义的类别中。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;在图像分类任务中取得了显著的进展。EfficientNet是一种新型的…

Java基础-综合案例

1、设计一个可以执行基本数学运算&#xff08;加减乘除&#xff09;的计算器程序功能描述&#xff1a;用户输入两个数字、一个运算符&#xff08;、-、*、/&#xff09;。根据所选运算符执行相应的数学运算&#xff0c;显示运算结果。import java.util.Scanner;public class Te…

四、计算机组成原理——第3章:存储系统

目录 3.1存储器概述 3.1.1存储器的分类 1.按在计算机中的作用(层次)分类 2.按存储介质分类 3.按存取方式分类 4.按信息的可保存性分类 3.1.2存储器的性能指标 3.2主存储器 3.2.1SRAM芯片和DRAM芯片 1.SRAM的工作原理 2.DRAM的工作原理 3.SRAM和DRAM的比较 4.存储器芯片的内部结…

3D Semantic Occupancy Prediction

3D 语义占用预测&#xff08;3D Semantic Occupancy Prediction&#xff09;旨在将真实世界环境划分为规则的三维体素&#xff08;voxel&#xff09;网格&#xff0c;并对每个体素同时预测&#xff1a; 占用状态&#xff08;Occupancy&#xff09;&#xff1a;该体素是否被物体…

在Word和WPS文字中添加的拼音放到文字右边

在Word和WPS文字中&#xff0c;可以方便地为中文汉字添加拼音。默认的是拼音在汉字的上方&#xff0c;而且不方便直接编辑。可以简单操作后把拼音放在汉字的右边&#xff0c;并且可以方便地编辑。一、Word&#xff1a;先为汉字添加拼音&#xff0c;然后选择性粘贴为纯文本即可1…

Torchv Unstrustured 文档解析库

一个强大且开发者友好的文档解析库&#xff0c;专为RAG&#xff08;检索增强生成&#xff09;应用优化。基于Apache Tika、Apache POI和PDFBox等业界标准Java库构建&#xff0c;TorchV Unstructured提供了增强的解析能力&#xff0c;具备智能表格结构识别和内容提取功能。 &am…

30天入门Python(基础篇)——第22天:面向对象之继承与多继承

目录 专栏导读 学习目标 1. 继承的基本概念 1.1 继承的优势 2. 单继承 2.1 基本语法 2.2 实际示例 3. super()函数详解 3.1 基本用法 3.2 super()的高级用法 4. 多继承 4.1 多继承语法 4.2 多继承示例 5. 方法解析顺序(MRO) 5.1 查看MRO 5.2 复杂的MRO示例 6. 实际应用案例 6…

学习人工智能所需知识体系及路径详解

一、核心基础知识体系1. 数学基础线性代数关键概念&#xff1a;向量空间、矩阵运算&#xff08;转置/逆矩阵&#xff09;、特征值分解、奇异值分解&#xff08;SVD&#xff09;应用场景&#xff1a;数据降维&#xff08;PCA&#xff09;、图像处理&#xff08;矩阵变换&#xf…

前端实现银河粒子流动特效的技术原理与实践

文章目录 1,引言 2,特效效果简介 3,技术原理解析 1. 粒子系统基础 2. 银河结构的数学建模 3. 动态流动与旋转 4,实现流程图 5,关键代码实现与详细讲解 1. 初始化Three.js场景 2. 生成银河粒子数据 3. 创建粒子几何体与材质 4. 实现粒子的动态旋转与动画 5. 可选:粒子颜色…

Qt_Gif_Creator 基于Qt的屏幕gif录制工具

本文介绍了一个基于Qt框架的屏幕GIF录制工具的实现。该工具包含XYGifCreator类负责GIF创建逻辑&#xff0c;使用Gif.h库进行GIF编码&#xff1b;XYGifFrame类提供GUI界面&#xff0c;支持设置录制区域大小、帧率以及保存位置。工具采用多线程处理GIF编码&#xff0c;支持Window…

Linux实战:HAProxy全方位指南

一、负载均衡核心概念 1.1 负载均衡定义 负载均衡&#xff08;Load Balance&#xff0c;简称LB&#xff09;是一种基于硬件设备或软件服务的高可用反向代理技术。它将特定业务&#xff08;如Web服务、网络流量&#xff09;分发到后端的一个或多个服务器/设备&#xff0c;从而提…

22 BTLO 蓝队靶场 Countdown 解题记录

Tools: - ELK - CyberChef - OSINT (whole World Wide Web) Hunt #1: Brute Force DetectedSource: winevent-security (1/3) — 可疑暴力破解流量来自哪个IP地址 What is the IP address from which the suspicious brute force traffic is seen?? 我们需要寻找暴力破解…