首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 網絡編程基礎(一):C/S 與 B/S 架構、網絡類庫、通信流程詳解

     編輯:Java 相關知識

一、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 及子包提供協議支持:

動態擴充協議機制:URL.setURLStreamHandlerFactory 可註冊自定義協議處理器。

三、C/S 通信標準流程:請求-應答模式

  1. 服務器啟動,ServerSocket 綁定端口,進入 accept() 監聽狀態。
  2. 客戶端創建 Socket,指定服務器 IP/主機名 + 端口,發起連接。
  3. 服務器 accept() 返回新 Socket,雙方建立可靠雙向字節流通道(TCP)。
  4. 雙方通過 Socket.getInputStream()/getOutputStream() 讀寫數據,實現應用層協議。
  5. 會話結束,雙方關閉流和 Socket,釋放端口資源。

四、Java 實現 C/S 關鍵技術點

1. 服務端多線程模型

  • 主線程:循環 serverSocket.accept(),職責單一——接納連接。
  • 工作線程:每個 Socket 對應一個線程(Runnable/Thread),負責完整業務處理(讀取請求、計算、發送響應)。
  • 隔離性:單客戶端阻塞/異常不影響其他連接。

2. 核心類:Socket vs ServerSocket

包功能
java.net基礎網絡:Socket、ServerSocket、InetAddress、URL、URLConnection、DatagramSocket (UDP)
java.net.ftpFTP 協議客戶端支持
java.net.www.contentWeb 內容處理(MIME 類型、內容處理器)
java.net.www.htmlHTML 解析、渲染相關
java.net.www.httpHTTP 協議實現(HttpURLConnection、緩存、重定向、認證)

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 客戶端、微服務通信的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類角色關鍵方法
ServerSocket服務端監聽器accept()、bind()、setSoTimeout()
Socket雙方通信端點getInputStream()、getOutputStream()、close()、setSoTimeout()