一、Java 網絡應用模型:從 C/S 到 B/S
傳統 C/S(Client/Server)二層架構
- 客戶端直接連接數據庫/業務服務器,業務邏輯、數據訪問、展示混合在客戶端。
- 缺點:部署維護難(客戶端升級推送)、安全性弱(直連 DB)、客戶端臃腫。
Java Web 模型:三層 B/S (Browser/Server) 架構
- 展示層:瀏覽器/薄客戶端(HTML/JS/CSS/Applet 早期)。
- 應用層:Web 服務器 + 應用服務器,承載業務邏輯、事務、安全、集群。
- 數據層:數據庫服務器,專職數據存儲、查詢優化。
Java 通過 Servlet/JSP/JSF/Spring MVC 實現動態 Web,JDBC/JPA 訪問數據庫,完美契合三層架構。
二、Java 網絡類庫體系
Java 核心包 java.net 及子包提供協議支持:
| 包 | 功能 |
java.net | 基礎網絡:Socket、ServerSocket、InetAddress、URL、URLConnection、DatagramSocket (UDP) |
java.net.ftp | FTP 協議客戶端支持 |
java.net.www.content | Web 內容處理(MIME 類型、內容處理器) |
java.net.www.html | HTML 解析、渲染相關 |
java.net.www.http | HTTP 協議實現(HttpURLConnection、緩存、重定向、認證) |
動態擴充協議機制:URL.setURLStreamHandlerFactory 可註冊自定義協議處理器。
三、C/S 通信標準流程:請求-應答模式
- 服務器啟動,
ServerSocket 綁定端口,進入 accept() 監聽狀態。
- 客戶端創建
Socket,指定服務器 IP/主機名 + 端口,發起連接。
- 服務器
accept() 返回新 Socket,雙方建立可靠雙向字節流通道(TCP)。
- 雙方通過
Socket.getInputStream()/getOutputStream() 讀寫數據,實現應用層協議。
- 會話結束,雙方關閉流和 Socket,釋放端口資源。
四、Java 實現 C/S 關鍵技術點
1. 服務端多線程模型
- 主線程:循環
serverSocket.accept(),職責單一——接納連接。
- 工作線程:每個
Socket 對應一個線程(Runnable/Thread),負責完整業務處理(讀取請求、計算、發送響應)。
- 隔離性:單客戶端阻塞/異常不影響其他連接。
2. 核心類:Socket vs ServerSocket
| 類 | 角色 | 關鍵方法 |
ServerSocket | 服務端監聽器 | accept()、bind()、setSoTimeout() |
Socket | 雙方通信端點 | getInputStream()、getOutputStream()、close()、setSoTimeout() |
3. 客戶端流處理
DataInputStream:包裝 InputStream,提供 readLine()、readInt() 等便利方法。
PrintStream:包裝 OutputStream,提供 println()、printf(),自動 flush 可配置。
- 標準流:
System.in/System.out 同樣可包裝為 DataInputStream/PrintStream 實現控制台交互。
五、示例程序功能描述
下篇將提供完整代碼實現一個文本反轉服務:
- 客戶端輸入一行文本 → 發送服務端。
- 服務端反轉字符順序 → 返回客戶端。
- 客戶端顯示結果,持續交互直到 EOF。
該示例涵蓋:Socket 建立、多線程服務端、行文本協議、流讀寫、資源釋放、異常處理——Java 網絡編程入門的「Hello World」標準形態。
總結
Java 網絡編程以 java.net 為核心,天然支持 TCP/UDP、HTTP/FTP 等協議,Socket + 多線程 是傳統同步阻塞 IO (BIO) 服務端的經典模式。理解 C/S 到 B/S 的架構演進、請求-應答流程、流包裝類用法,是進階 NIO、Netty、HTTP 客戶端、微服務通信的基石。
- 上一篇文章: Java Socket 編程實戰(二):多線程服務端與客戶端完整代碼
- 下一篇文章: 深入解析雙重檢查鎖定失效原因與 Volatile 修正方案
Copyright ©
程式碼之家 All Rights Reserved