【Java學習|黑馬筆記|Day23】網絡編程、反射、動態代理

【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?? 我們需要尋找暴力破解…