Java 网络编程超详细整理,从入门到精通

网络编程是 Java 实现程序跨设备数据交互的核心技术,日常聊天、文件传输、网页访问底层都依赖网络通信。本文围绕网络基础概念、网络三要素、UDP 数据报通信、TCP 流式通信四大模块完整讲解,搭配概念对比、工具方法表格、完整收发代码、通信流程拆解,适合零基础自学、期末复习、面试查漏补缺。

一、网络编程基本概念

1.1 网络编程定义

网络编程是实现不同设备上程序互相传输、交换数据的技术,Java 全部网络相关 API 都存放在java.net包中。

1.2 两种主流软件架构

  1. CS 架构(客户端 / 服务端 Client-Server)
    • 客户端:需要单独下载安装软件(网易云音乐、游戏客户端);
    • 服务端:后端程序,提供数据与业务支撑;
    • 优缺点:客户端功能完整,需要适配不同操作系统。
  2. BS 架构(浏览器 / 服务端 Browser-Server)
    • 客户端:通用浏览器(Chrome、Edge),无需安装专用软件;
    • 服务端:网页后台服务;
    • 优缺点:免安装,跨设备访问,重度交互体验弱于 CS。

1.3 小结

所有网页、桌面软件底层都依托网络编程实现,Java 通过java.net包提供全套通信 API。

二、网络编程三要素

网络通信缺一不可三大核心:IP 地址、端口号、通信协议

2.1 要素 1:IP 地址(设备唯一标识)

IP 是互联网协议地址,用来区分局域网 / 互联网内每一台上网设备,分 IPv4、IPv6 两类。

  1. IPv4
    • 32 位二进制,点分十进制格式 192.168.1.10
    • 地址数量有限,公网 IP 资源紧张,因此划分私有局域网 IP。
    • 私有 IP 段:192.168.0.0 ~ 192.168.255.255,仅局域网内可用,无法公网路由。
  2. IPv6
    • 128 位二进制,冒分十六进制,地址容量极大,解决 IPv4 枯竭问题。
  3. 特殊本地 IP:127.0.0.1 / localhost,永远代表本机,测试程序专用。
  4. Windows 常用 CMD 网络命令
    • ipconfig:查看本机 IP 地址;
    • ip 目标地址:检测两台设备网络是否连通。
  5. InetAddress 工具类(Java 操作 IP)| 方法 | 说明 || ---- | ---- ||static InetAddress getByName (String host)| 传入 IP / 域名,获取 IP 对象 ||String getHostName ()| 获取主机名 ||String getHostAddress ()| 获取纯 IP 字符串 |

2.2 要素 2:端口号(程序唯一标识)

一台电脑可运行多个软件,端口用来区分设备上不同应用程序。

  1. 取值范围:0 ~ 65535(两个字节整数)
  2. 端口分段规范
    • 0~1023:系统知名端口(80 网页、22 远程登录),禁止自定义程序使用;
    • 1024~65535:开发自定义端口,项目统一选用该区间;
  3. 硬性规则:同一台机器同一个端口只能被一个程序占用,重复绑定抛出异常。

2.3 要素 3:通信协议(数据传输规则)

规定数据打包、发送、接收、校验统一标准,Java 网络两大核心协议:UDP、TCP

协议 类型 特点 适用场景
UDP 面向无连接 发送前不建立连接,速度快;单包最大 64KB;无校验易丢包 直播、语音通话、游戏实时消息
TCP 面向连接 三次握手建立、四次挥手断开;无数据大小限制,安全可靠 文件传输、网页、数据库交互

2.4 小结

IP 找设备,端口找设备内程序,协议规定传输规则,三者配合完成网络通信。

三、UDP 协议收发数据

3.1 UDP 核心特性

无连接、数据打包成数据包传输,类比快递:只打包投递,不确认对方是否签收。核心类:

  • DatagramSocket:收发站点(快递网点)
  • DatagramPacket:数据包(快递包裹,存放字节数据、目标 IP 端口)

3.2 UDP 发送端执行步骤

  1. 创建DatagramSocket发送对象;

  2. 将字符串转为字节数组,封装DatagramPacket数据包(绑定目标 IP、端口);

  3. 调用socket.send(数据包)发送;

  4. 关闭 socket 释放资源。

    import java.net.*;
    public class UDPSend {
    public static void main(String args[]) throws Exception {
    DatagramSocket socket = new DatagramSocket();
    String msg = "UDP测试消息";
    byte[] data = msg.getBytes();
    InetAddress ip = InetAddress.getByName("127.0.0.1");
    DatagramPacket packet = new DatagramPacket(data,data.length,ip,8888);
    socket.send(packet);
    socket.close();
    }
    }

3.3 UDP 接收端执行步骤

  1. 创建DatagramSocket,绑定监听端口;

  2. 定义空字节数组,创建空数据包;

  3. socket.receive(数据包)阻塞等待接收;

  4. 从数据包取出字节,转为字符串打印;

  5. 关闭资源。

    import java.net.*;
    public class UDPReceive {
    public static void main(String args[]) throws Exception {
    DatagramSocket socket = new DatagramSocket(8888);
    byte[] buf = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buf,buf.length);
    socket.receive(packet);
    String res = new String(packet.getData(),0,packet.getLength());
    System.out.println("收到:"+res);
    socket.close();
    }
    }

3.4 小结

UDP 依靠 DatagramSocket、DatagramPacket 实现收发;无连接、速度快、存在丢包风险,单次数据不超过 64KB。

四、TCP 协议收发数据

4.1 TCP 核心特性

面向连接通信,通信前三次握手确认连接,结束四次挥手释放通道,数据分段传输、有重传机制,安全无丢失。两类核心 Socket:

  1. Socket:客户端套接字(主动发起连接)
  2. ServerSocket:服务端套接字(被动监听客户端请求)

4.2 三次握手(建立连接)

  1. 客户端发送连接请求;
  2. 服务端回复确认收到;
  3. 客户端再次确认,双向通道建立完成。

4.3 四次挥手(断开连接)

  1. 客户端发起关闭请求;
  2. 服务回复收到关闭通知,继续处理剩余数据;
  3. 服务端数据处理完毕,发送关闭通知;
  4. 客户端确认断开,连接彻底销毁。

4.4 TCP 客户端流程

  1. Socket(IP,端口) 创建客户端,主动连接服务端;

  2. getOutputStream() 获取输出流向服务端发数据;

  3. getInputStream() 获取输入流读取服务端返回;

  4. 通信结束关闭 Socket。

    import java.net.Socket;
    import java.io.*;
    public class TCPClient {
    public static void main(String[] args) throws Exception {
    Socket socket = new Socket("127.0.0.1",9999);
    OutputStream out = socket.getOutputStream();
    out.write("TCP测试内容".getBytes());
    socket.close();
    }
    }

4.5 TCP 服务端流程

  1. ServerSocket(端口) 创建服务端,绑定监听端口;

  2. accept() 阻塞等待客户端连接,返回 Socket 对象;

  3. 通过 Socket 获取输入输出流完成数据交互;

  4. 逐层关闭流、Socket、ServerSocket。

    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.InputStream;
    public class TCPServer {
    public static void main(String[] args) throws Exception {
    ServerSocket server = new ServerSocket(9999);
    Socket socket = server.accept();
    InputStream in = socket.getInputStream();
    byte[] buf = new byte[1024];
    int len = in.read(buf);
    System.out.println(new String(buf,0,len));
    socket.close();
    server.close();
    }
    }

4.6 小结

TCP 分客户端 Socket、服务端 ServerSocket;三次握手建连、四次挥手断连,数据安全无上限,适合文件、网页等可靠传输场景。

五、全文总结

  1. 网络编程作用:跨设备程序数据交互,分 CS、BS 两种架构;
  2. 网络三要素:IP 区分设备、端口区分程序、协议规范传输;
    • IP:IPv4 局域网私有段 192.168,本地回环 127.0.0.1;
    • 端口:0~1023 系统占用,开发使用 1024 以上;
  3. UDP:无连接,DatagramSocket+DatagramPacket,速度快、上限 64KB、易丢包;
  4. TCP:面向连接,Socket 客户端 / ServerSocket 服务端,三次握手、四次挥手,数据可靠无大小限制。

拓展学习建议

  1. 先运行 UDP 收发案例,观察无连接通信特点;
  2. 调试 TCP 客户端服务端代码,理解阻塞 accept 等待逻辑;
  3. 扩展实战:TCP 文件上传、UDP 简易聊天室;
  4. 区分两种协议使用场景,理解丢包与可靠传输取舍。

入门面试高频考点

  1. CS 与 BS 架构区别;
  2. 网络通信三要素作用;
  3. IPv4 私有地址、本地回环地址含义;
  4. UDP 和 TCP 核心区别、适用场景;
  5. UDP 两大核心类、TCP 客户端与服务端类;
  6. TCP 三次握手、四次挥手作用。