網絡編程常被初學者視為高門檻領域,實則核心模型極其簡單——兩個程序通過網絡交換數據。本文從生活類比切入,系統講解 IP/端口/協議、C/S/B/S 架構、TCP/UDP 差異,並給出 Java 代碼實現步驟。
| 網絡概念 | 生活類比 | 說明 |
|---|---|---|
| IP 地址 | 手機號碼 | 唯一標識設備,IPv4 格式 4 段 0-255 數字 |
| 域名 (DNS) | 通訊錄姓名 | 易記別名,解析為 IP,一域名對一 IP,一 IP 可對多域名 |
| 端口 | 分機號 | 區分同一設備上不同程序,範圍 0-65535 |
| 協議 | 電報密碼本 | 規定數據格式,雙方遵循相同規則才能正確編解碼 |
| 特性 | TCP | UDP |
|---|---|---|
| 連接建立 | 三次握手,面向連接 | 無連接,直接發送 |
| 可靠性 | 保證到達、有序、無重複 | 不可靠,可能丟包、亂序 |
| 流控/擁塞控制 | 滑動窗口、慢啟動等 | 無 |
| 開銷 | 頭部 20+ 字節,狀態維護 | 頭部 8 字節,輕量 |
| 類比 | 打電話(確認對方在線) | 發短信(不保證收到) |
| 適用場景 | 文件傳輸、郵件、HTTP、數據庫 | 視頻流、DNS、即時遊戲、廣播 |
Socket socket = new Socket(serverIP, port); 建立連接OutputStream out = socket.getOutputStream(); / InputStream in = socket.getInputStream();socket.close(); 釋放資源ServerSocket server = new ServerSocket(port); 監聽端口Socket client = server.accept(); 阻塞等待連接InetAddress inet1 = InetAddress.getByName("www.163.com"); // 域名解析
InetAddress inet2 = InetAddress.getByName("127.0.0.1"); // IP 構造
InetAddress local = InetAddress.getLocalHost(); // 本機地址
System.out.println("主機名: " + local.getHostName());
System.out.println("IP: " + local.getHostAddress());
掌握基礎概念與標準流程,再結合 Netty 等高性能框架,即可構建健壯的分布式網絡應用。