Java基礎 Day26

一、網絡編程簡介

1、概念

網絡編程指在網絡通信協議下,不同計算機上運行的程序,進行數據傳輸

2、軟件架構

(1)CS架構(客戶端和服務端)

在用戶本地有一個客戶端程序,在遠程有一個服務器端程序

(2)BS架構(瀏覽器和服務端)

只需要瀏覽器,用戶通過不同的網址,客戶訪問不同的服務器端程序

微信小程序屬于BS架構

二、網絡編程三要素

1、IP

(1)簡介

Internet Protocol,是互聯網協議地址,也稱IP地址

上網設備在網絡中的地址,是唯一的

是設備在網絡中的唯一標識

有 IPv4 和 IPv6

域名通過 DNS 服務器解析為 IP

(2)IPv4 的地址分類形式

公網地址(萬維網使用) 和私有地址(局域網使用)

192.168. 開頭的就是私有地址,范圍即為192.168.0.0~192.168.255.255

專門為組織機構內部使用,以此節省IP

(3)特殊 IP 地址

127.0.0.1,也可以是localhost,是回送地址,也稱本地回環地址,也稱本機IP,永遠只會尋找當前所在本機

(4)常用CMD命令

ipconfig:查看本機IP地址

ping:檢查網絡是否連通

(5)INetAddress 類

static?InetAddress?getByName?(String?host)

確定主機名稱的IP地址

主機名稱可以是機器名稱,也可以是IP地址

String?getHostName?()

獲取此?IP?地址的主機名

String?getHostAddress?()

返回文本顯示中的?IP?地址字符串

2、端口

應用程序在設備中唯一的標識

端口號:由兩個字節表示的整數,取值范圍:0~65535

其中0~1023之間的端口號用于一些知名的網絡服務或者應用

我們自己使用1024及以上的端口號即可

注意:一個端口號只能被一個應用程序使用

3、協議

計算機網絡中,連接和通信的規則被稱為網絡通信協議

常見的協議有UDP、TCP、http、https、ftp等

三、UDP 協議

1、特點

UDP是面向無連接通信協議(沒有接收端也能發送)

速度快,有大小限制(一次最多發送64K),數據不安全,易丟失數據

2、收發數據步驟及示例

public class Send {public static void main(String[] args) throws Exception {// 1、創建DatagramSocket對象DatagramSocket socket = new DatagramSocket(8888);// 如果不指定端口,則隨機指定一個// 2、創建DatagramPacket對象String message = "Hello World!";byte[] content = message.getBytes();DatagramPacket packet = new DatagramPacket(content,content.length,InetAddress.getByName("127.0.0.1"),9999);// 3、發送信息socket.send(packet);// 4、釋放資源socket.close();}
}public class Receive {public static void main(String[] args) throws Exception {// 1、創建DatagramSocket對象DatagramSocket socket = new DatagramSocket(9999);// 2、創建DatagramPacket對象byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);// 3、接收數據socket.receive(packet);// 注意:receive方法會阻塞,直到接收到信息后才會往下執行// 接收到的數據在 packet中// 4、解析數據byte[] data = packet.getData();String msg = new String(data, 0, packet.getLength());String ip = packet.getAddress().getHostAddress();System.out.println("from: " + ip);System.out.println("data: " + msg);// 5、釋放資源socket.close();}

四、TCP 協議

1、特點

TCP 協議是面向連接的通信協議(需要服務端響應請求)

速度慢,但沒有大小限制,數據安全

2、收發數據步驟及示例

public class Client {public static void main(String[] args) throws Exception {// 1、創建Socket對象,指定服務端的IP和端口Socket socket = new Socket("127.0.0.1", 8888);// 2、獲取傳輸數據的流對象OutputStream os = socket.getOutputStream();InputStream is = socket.getInputStream();// 3、收發數據os.write("Nice to meet you".getBytes());byte[] data = new byte[1024];int len = is.read(data);String msg = new String(data, 0, len);String ip = socket.getInetAddress().getHostAddress();System.out.println("from: " + ip);System.out.println("data: " + msg);// 4、釋放資源socket.close();}
}public class Server {public static void main(String[] args) throws Exception {// 1、創建ServerSocket對象,指定端口ServerSocket server = new ServerSocket(8888);System.out.println("waiting for client...");// 2、相應客戶端發送的請求Socket socket = server.accept();// 3、獲取傳輸數據的流對象OutputStream os = socket.getOutputStream();InputStream is = socket.getInputStream();// 4、收發數據byte[] data = new byte[1024];int len = is.read(data);String msg = new String(data, 0, len);String ip = socket.getInetAddress().getHostAddress();System.out.println("from: " + ip);System.out.println("data: " + msg);os.write("Nice to meet you too".getBytes());// 5、關流并釋放資源socket.close();server.close();}
}

3、細節補充

(1)三次握手

第一次:客戶端向服務器發送連接請求(SYN包)并等待服務器確認

第二次:服務器向客戶端返回一個響應(SYN包 + ACK包)告訴客戶端收到了請求

第三次:客戶端向服務器再次發送確認信息(ACK包),連接建立

Tips:第三次握手是為了防?失效的連接請求突然傳到服務器(如網絡延遲的重復SYN包)造成單向連接

(4)四次揮手

第一次:客戶端向服務器發送取消連接的請求(FIN包)

第二次:服務器返回一個響應(ACK包)告訴客戶端收到了請求

服務器將最后的數據處理完畢

第三次:服務器向客戶端發送確認取消連接的消息(FIN包)

第四次:客戶端再次發送確認消息(ACK包),連接取消

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

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

相關文章

【Hot 100】45. 跳躍游戲 II

目錄 引言跳躍游戲 IIdp解題貪心解題 🙋?♂? 作者:海碼007📜 專欄:算法專欄💥 標題:【Hot 100】45. 跳躍游戲 II?? 寄語:書到用時方恨少,事非經過不知難! 引言 跳躍…

計算機網絡第1章(上):網絡組成與三種交換方式全解析

目錄 一、計算機網絡的概念二、計算機網絡的組成和功能2.1 計算機網絡的組成2.2 計算機網絡的功能 三、電路交換、報文交換、分組交換3.1 電路交換(Circuit Switching)3.2 報文交換(Message Switching)3.3 分組交換(Pa…

[總結]前端性能指標分析、性能監控與分析、Lighthouse性能評分分析

前端性能分析大全 前端性能優化 LightHouse性能評分 性能指標監控分析 瀏覽器加載資源的全過程性能指標分析 性能指標 在實現性能監控前,先了解Web Vitals涉及的常見的性能指標 Web Vitals 是由 Google 推出的網頁用戶體驗衡量指標體系,旨在幫助開發者量…

Windows商店中的免費掃雷游戲應用

《掃雷》是一款經典的單人益智小游戲,1992年微軟發布的Windows 3.1中加入該游戲,從此風靡全世界。游戲目標是通過邏輯推理,在最短的時間內根據點擊格子出現的數字找出所有非雷格子,同時避免踩雷。 此Windows應用實現了經典掃雷的…

ActiveMQ 可觀測性最佳實踐

ActiveMQ 介紹 ActiveMQ 是一款高性能、開源的消息中間件,支持多種消息協議(如 JMS、AMQP、MQTT 等),能夠實現應用程序之間的異步通信和消息傳遞。它提供點對點(Queue)和發布/訂閱(Topic&#…

【Linux命令】scp遠程拷貝

文章目錄 1. 基本語法與常用選項2. 使用場景和使用示例本地文件->遠程主機遠程主機文件->本地遠程主機->另一臺遠程主機 3. 使用注意事項 scp(Secure Copy Protocol)是linux中基于ssh的安全文件傳輸工具,用于在本地和遠程主機之前安…

如何優化 Harmony-Cordova 應用的性能?

以下是針對 ?Harmony-Cordova 應用性能優化?的完整方案,結合鴻蒙原生特性和Cordova框架優化策略: ??一、渲染性能優化? ?減少布局嵌套層級? 使用扁平化布局(如 Grid、GridRow)替代多層 Column/Row 嵌套,避免冗…

c++學習之---模版

目錄 一、函數模板: 1、基本定義格式: 2、模版函數的優先匹配原則: 二、類模板: 1、基本定義格式: 2、類模版的優先匹配原則(有坑哦): 3、缺省值的設置: 4、ty…

SpringAI(GA):RAG下的ETL快速上手

原文鏈接:SpringAI(GA):RAG下的ETL快速上手 教程說明 說明:本教程將采用2025年5月20日正式的GA版,給出如下內容 核心功能模塊的快速上手教程核心功能模塊的源碼級解讀Spring ai alibaba增強的快速上手教程 源碼級解讀 版本&a…

用dayjs解析時間戳,我被提了bug

引言 前幾天開發中突然接到測試提的一個 Bug,說我的時間組件顯示異常。 我很詫異,這里初始化數據是后端返回的,我什么也沒改,這bug提給我干啥。我去問后端:“這數據是不是有問題?”。后端答:“…

DataAgent產品經理(數據智能方向)

DataAgent產品經理(數據智能方向) 一、核心崗位職責 AI智能體解決方案設計 面向工業/政務場景構建「數據-模型-交互」閉環,需整合多源異構數據(如傳感器數據、業務系統日志)與AI能力(如大模型微調、知識圖…

Ubuntu取消開機用戶自動登錄

注:配置前請先設置登錄密碼,不同顯示管理器配置方法不同,可用命令查看:cat /etc/X11/default-display-manager 一、LightDM 顯示管理器,關閉 Ubuntu 系統用戶自動登錄 查找自動登錄配置文件,可以看到類似 a…

使用lighttpd和開發板進行交互

文章目錄 🧠 一、Lighttpd 與開發板的交互原理1. 什么是 Lighttpd?2. 與開發板交互的方式? 🧾 二、lighttpd.conf 配置文件講解?? 注意事項: 📁 三、目錄結構說明💡 四、使用 C 編寫 CGI 腳本…

Apache IoTDB V2.0.3 發布|新增元數據導入導出腳本適配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已經發布! V2.0.3 作為樹表雙模型正式版本,主要新增元數據導入導出腳本適配表模型、Spark 生態集成(表模型)、AINode 返回結果新增時間戳,表模型新增部分聚…

車輛檢測算法在爆炸事故應急響應中的優化路徑

視覺分析賦能車輛管控:以山東應急場景為例 背景:應急場景下的車輛管控痛點 近期山東多起爆炸事故暴露了應急響應中的車輛管理短板:消防車、救護車因違停車輛堵塞通道,違規車輛闖入事故核心區,傳統監控系統依賴人工識別…

∑ 1/n 調和級數 是 發散的

為什么 ∑ 1 u \sum \frac{1}{u} ∑u1?(即 ∑ 1 n \sum \frac{1}{n} ∑n1?,通常稱為調和級數)是發散的? ? 一、首先明確你問的是這個級數: ∑ n 1 ∞ 1 n \sum_{n1}^{\infty} \frac{1}{n} n1∑∞?n1? 這個級數…

Android第十二次面試-多線程和字符串算法總結

多線程的創建與常見使用方法 ?一、多線程創建方式? ?1. 繼承Thread類? class MyThread extends Thread {Overridepublic void run() {// 線程執行邏輯System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …

大模型調用數據庫表實踐:基于自然語言的SQL生成與數據查詢系統

# 大模型調用數據庫表實踐:基于自然語言的SQL生成與數據查詢系統 ## 一、背景與目標 在企業數據管理場景中,非技術人員(如業務人員、管理人員)常常需要通過數據庫查詢獲取關鍵信息,但直接編寫SQL語句存在技術門檻。傳…

28 C 語言作用域詳解:作用域特性(全局、局部、塊級)、應用場景、注意事項

1 作用域簡介 作用域定義了代碼中標識符(如變量、常量、數組、函數等)的可見性與可訪問范圍,即標識符在程序的哪些位置能夠被引用或訪問。在 C 語言中,作用域主要分為三類: 全局作用域局部作用域塊級作用域 需注意&am…

Tomcat運行比較卡頓進行參數調優

在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加參數 1. 初步調整參數(緩解問題) set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代,減少對象過早晉升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…