尚硅谷2019版Java網絡編程筆記

第14章 網絡編程


網絡編程概述

什么是網絡編程?

  • 網絡編程是通過網絡協議實現計算機之間的數據交換。
  • Java提供了強大的網絡編程支持,隱藏了底層細節,開發者可以輕松實現網絡通信。

網絡編程的核心問題

  1. 如何定位網絡上的主機:通過IP地址和端口號。
  2. 如何高效傳輸數據:通過協議(如TCP、UDP)進行數據傳輸。

網絡通信要素概述

通信要素

  • IP地址:唯一標識網絡中的主機。
  • 端口號:標識主機上的應用程序。
  • 網絡協議:規定數據傳輸的規則。

網絡協議分層

  • OSI參考模型:理論模型,分為7層。
  • TCP/IP參考模型:實際應用中的4層模型。
OSI模型TCP/IP模型協議示例
應用層應用層HTTP、FTP、DNS
傳輸層傳輸層TCP、UDP
網絡層網絡層IP、ICMP
數據鏈路層物理+數據鏈路層Ethernet、Wi-Fi

通信要素1:IP和端口號

IP地址

  • IPv4:4個字節,如192.168.1.1
  • IPv6:16個字節,如3ffe:3201:1401:1280:c8ff:fe4d:db39:1984

端口號

  • 范圍:0~65535。
  • 分類
    • 公認端口:0~1023(如HTTP的80端口)。
    • 注冊端口:1024~49151(如Tomcat的8080端口)。
    • 動態端口:49152~65535。

InetAddress類

  • 功能:表示IP地址,支持域名解析。
  • 常用方法
    • getHostName():獲取主機名。
    • getHostAddress():獲取IP地址。
InetAddress address = InetAddress.getByName("www.atguigu.com");
System.out.println(address.getHostName());  // 輸出域名
System.out.println(address.getHostAddress()); // 輸出IP地址

通信要素2:網絡協議

TCP vs UDP

特性TCPUDP
連接方式面向連接,可靠無連接,不可靠
數據大小無限制最大64KB
速度較慢較快
應用場景文件傳輸、郵件視頻流、在線游戲

TCP三次握手

  1. 客戶端發送SYN報文。
  2. 服務器回復SYN+ACK報文。
  3. 客戶端發送ACK報文,連接建立。

TCP四次揮手

  1. 客戶端發送FIN報文。
  2. 服務器回復ACK報文。
  3. 服務器發送FIN報文。
  4. 客戶端回復ACK報文,連接關閉。

TCP網絡編程

客戶端步驟

  1. 創建Socket對象,連接服務器。
  2. 獲取輸入/輸出流,進行數據傳輸。
  3. 關閉Socket
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
out.write("Hello".getBytes());
socket.close();

服務器步驟

  1. 創建ServerSocket對象,監聽端口。
  2. 調用accept()方法,等待客戶端連接。
  3. 獲取輸入/輸出流,進行數據傳輸。
  4. 關閉ServerSocket
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
InputStream in = socket.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data, 0, len));
server.close();

UDP網絡編程

UDP特點

  • 無連接:發送數據前不需要建立連接。
  • 不可靠:不保證數據一定到達。

發送端

DatagramSocket ds = new DatagramSocket();
byte[] data = "Hello".getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length, InetAddress.getByName("127.0.0.1"), 10000);
ds.send(dp);
ds.close();

接收端

DatagramSocket ds = new DatagramSocket(10000);
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
ds.receive(dp);
System.out.println(new String(dp.getData(), 0, dp.getLength()));
ds.close();

URL編程

URL類

  • 功能:表示網絡資源的地址。
  • 結構協議://主機名:端口號/路徑?參數
URL url = new URL("http://www.atguigu.com/index.html");
System.out.println(url.getProtocol()); // 輸出協議
System.out.println(url.getHost());    // 輸出主機名

URLConnection類

  • 功能:與URL建立連接,進行數據讀寫。
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
System.out.println(new String(data, 0, len));

小結

  • IP和端口號:定位網絡中的主機和應用程序。
  • TCP:可靠傳輸,適合大數據量。
  • UDP:快速傳輸,適合實時應用。
  • URL:表示網絡資源地址,支持HTTP協議。
網絡編程
IP和端口號
網絡協議
TCP
UDP
URL編程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76551.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76551.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決【遠程主機可能不符合 glibc 和 libstdc++ Vs code 服務器的先決條件】

可能是因為vscode不支持遠程操作系統的版本,要么升級操作系統要么回退vscode版本 vscode回退1.97版本下載地址: 1.97版本VSCODE

forms+windows添加激活水印

formswindows添加激活水印 多語言水印文本,根據系統語言自動切換。水印顯示在每個屏幕的右下角,位置動態調整。半透明灰色文字,微軟雅黑字體。窗口無邊框、置頂、透明背景,不干擾用戶操作。支持多顯示器。高DPI適配。 效果圖&am…

LeetCode --- 444 周賽

題目列表 3507. 移除最小數對使數組有序 I 3508. 設計路由器 3509. 最大化交錯和為 K 的子序列乘積 3510. 移除最小數對使數組有序 II 一、移除最小數對使數組有序 I & II 由于數組是給定的,所以本題的操作步驟是固定的,我們只要能快速模擬操作的過…

限流、降級、熔斷、隔離?

在微服務架構中,服務限流、降級、熔斷和隔離是保障系統高可用性的核心手段,但它們解決的問題和應用場景不同。以下是它們的區別、解決方案和實際案例的詳細說明: 一、服務限流(Rate Limiting) 定義:通過限…

Day22 -php開發01--留言板+知識點(超全局變量 文件包含 數據庫操作 第三方插件)

環境要求:php7.0.9 小皮 navicat phpstorm24.1 知識點:會寫(留言板 留言板后臺) 超全局變量 三方插件的使用 文件包含 1、開啟小皮并利用navicat新建一個數據庫 注意:本地的服務mysql關閉后 才可打開小皮。屬…

制造一只電子喵 (qwen2.5:0.5b 微調 LoRA 使用 llama-factory)

AI (神經網絡模型) 可以認為是計算機的一種新的 “編程” 方式. 為了充分利用計算機, 只學習傳統的編程 (編程語言/代碼) 是不夠的, 我們還要掌握 AI. 本文以 qwen2.5 和 llama-factory 舉栗, 介紹語言模型 (LLM) 的微調 (LoRA SFT). 為了方便上手, 此處選擇使用小模型 (qwen2…

LeetCode 解題思路 37(Hot 100)

解題思路: 初始化: 初始化最大舉行 max 和棧 stack。左右補零: 考慮柱子遞增的邊界情況, 初始化填充柱狀圖 newHeights。遍歷處理: 對于每一根遍歷到的柱子 newHeights[i],若柱子高度小于棧口索引&#xf…

HTML — 過渡與動畫

HTML過渡與動畫是提升網頁交互體驗的核心技術,主要通過CSS實現動態效果。 過渡 CSS過渡(Transition)介紹 適用于元素屬性變化時的平滑漸變效果,如懸停變色、尺寸調整。通過定義transition-property(過渡屬性&#xf…

跨站請求是什么?

介紹 跨站請求(Cross-Site Request)通常是指瀏覽器在訪問一個網站時,向另一個域名的網站發送請求的行為。這個概念在 Web 安全中非常重要,尤其是在涉及到“跨站請求偽造(CSRF)”和“跨域資源共享&#xff…

Web攻防—SSRF服務端請求偽造Gopher偽協議無回顯利用

前言 重學Top10的第二篇,希望各位大佬不要見笑。 SSRF原理 SSRF又叫服務端請求偽造,是一種由服務端發起的惡意請求,SSRF發生在應用程序允許攻擊者誘使服務器向任意域或資源發送未經授權的請求時。服務器充當代理,執行攻擊者構造…

Hibernate:讓對象與數據庫無縫對話的全自動ORM框架

一、為什么需要全自動ORM? 在手動編寫SQL的時代,開發者需要在Java代碼和數據庫表之間來回切換: // Java對象 public class User {private Long id;private String name;// getters and setters }// SQL語句 SELECT * FROM user WHERE id ?…

C語言超詳細指針知識(一)

通過前面一段時間C語言的學習,我們了解了數組,函數,操作符等的相關知識,今天我們將要開始進行指針的學習,這是C語言中較難掌握的一個部分,一定要認真學習!!! 1.內存與地址…

程序化廣告行業(70/89):ABTester系統助力落地頁優化實踐

程序化廣告行業(70/89):ABTester系統助力落地頁優化實踐 在程序化廣告領域摸爬滾打多年,深知持續學習和知識共享的重要性。寫這篇博客,就是希望能和大家一起深入探索程序化廣告行業,共同學習、共同進步。今…

項目管理(高軟56)

系列文章目錄 項目管理 文章目錄 系列文章目錄前言一、進度管理二、配置管理三、質量四、風險管理五、真題總結 前言 本節主要講項目管理知識,這些知識聽的有點意思啊。對于技術人想創業,單干的都很有必要聽聽。 一、進度管理 二、配置管理 三、質量 四…

常見的后綴名

.exe .exe(“executable”(可執行的))是 Windows 操作系統中最常見的可執行文件擴展名。此類文件包含了計算機能夠直接運行的機器碼指令。當用戶雙擊 .exe 文件時,操作系統會讀取其中的指令并執行相應的程序或任務。…

XILINX DDR3專題---(1)IP核時鐘框架介紹

1.什么是Reference Clock,這個時鐘一定是200MHz嗎? 2.為什么APP_DATA是128bit,怎么算出來的? 3.APP :MEM的比值一定是1:4嗎? 4.NO BUFFER是什么意思? 5.什么情況下Reference Clock的時鐘源可…

Doris 安裝部署、實際應用及優化實踐:對比 ClickHouse 的深度解析

在實時分析、報表系統以及高并發 OLAP 查詢等場景中,列式存儲數據庫因其卓越的查詢性能逐漸成為主流。Doris 和 ClickHouse 是近年來最受歡迎的兩款開源 OLAP 引擎,本文將系統介紹 Doris 的安裝部署、應用場景及優化實踐,并與 ClickHouse 做一…

OracleLinuxR5U5系統重啟后啟動數據庫oracle23ai

1、切換到oracle用戶 [rootOracleLinux-R9-U5 ~]# su oracle2、查看oracle是否配置了ORACLE_SID [oracleOracleLinux-R9-U5 root]$ cd ~ [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile3、輸出內容如下: [oracleOracleLinux-R9-U5 ~]$ cat .bash_profile # .ba…

【正點原子】STM32MP257 同構多核架構下的 ADC 電壓采集與處理應用開發實戰

在嵌入式系統中,ADC模擬電壓的讀取是常見的需求。如何高效、并發、且可控地完成數據采集與處理?本篇文章通過雙線程分別綁定在 Linux 系統的不同 CPU 核心上,采集 /sys/bus/iio 接口的 ADC 原始值與縮放系數 scale,并在另一個核上…

電商用戶購物行為分析:基于K-Means聚類與分類驗證的完整流程

隨著電商行業的快速發展,用戶行為分析成為企業優化營銷策略、提升用戶體驗的重要手段。通過分析用戶的購物行為數據,企業可以挖掘出用戶群體的消費特征和行為模式,從而制定更加精準的營銷策略。本文將詳細介紹一個基于Python實現的電商用戶購物行為分析系統,涵蓋數據預處理…