网络编程是 Java 实现程序跨设备数据交互的核心技术,日常聊天、文件传输、网页访问底层都依赖网络通信。本文围绕网络基础概念、网络三要素、UDP 数据报通信、TCP 流式通信四大模块完整讲解,搭配概念对比、工具方法表格、完整收发代码、通信流程拆解,适合零基础自学、期末复习、面试查漏补缺。
一、网络编程基本概念
1.1 网络编程定义
网络编程是实现不同设备上程序互相传输、交换数据的技术,Java 全部网络相关 API 都存放在java.net包中。
1.2 两种主流软件架构
- CS 架构(客户端 / 服务端 Client-Server)
- 客户端:需要单独下载安装软件(网易云音乐、游戏客户端);
- 服务端:后端程序,提供数据与业务支撑;
- 优缺点:客户端功能完整,需要适配不同操作系统。
- BS 架构(浏览器 / 服务端 Browser-Server)
- 客户端:通用浏览器(Chrome、Edge),无需安装专用软件;
- 服务端:网页后台服务;
- 优缺点:免安装,跨设备访问,重度交互体验弱于 CS。
1.3 小结
所有网页、桌面软件底层都依托网络编程实现,Java 通过java.net包提供全套通信 API。
二、网络编程三要素
网络通信缺一不可三大核心:IP 地址、端口号、通信协议
2.1 要素 1:IP 地址(设备唯一标识)
IP 是互联网协议地址,用来区分局域网 / 互联网内每一台上网设备,分 IPv4、IPv6 两类。
- IPv4
- 32 位二进制,点分十进制格式
192.168.1.10; - 地址数量有限,公网 IP 资源紧张,因此划分私有局域网 IP。
- 私有 IP 段:
192.168.0.0 ~ 192.168.255.255,仅局域网内可用,无法公网路由。
- 32 位二进制,点分十进制格式
- IPv6
- 128 位二进制,冒分十六进制,地址容量极大,解决 IPv4 枯竭问题。
- 特殊本地 IP:
127.0.0.1/localhost,永远代表本机,测试程序专用。 - Windows 常用 CMD 网络命令
ipconfig:查看本机 IP 地址;ip 目标地址:检测两台设备网络是否连通。
- InetAddress 工具类(Java 操作 IP)| 方法 | 说明 || ---- | ---- ||static InetAddress getByName (String host)| 传入 IP / 域名,获取 IP 对象 ||String getHostName ()| 获取主机名 ||String getHostAddress ()| 获取纯 IP 字符串 |
2.2 要素 2:端口号(程序唯一标识)
一台电脑可运行多个软件,端口用来区分设备上不同应用程序。
- 取值范围:0 ~ 65535(两个字节整数)
- 端口分段规范
- 0~1023:系统知名端口(80 网页、22 远程登录),禁止自定义程序使用;
- 1024~65535:开发自定义端口,项目统一选用该区间;
- 硬性规则:同一台机器同一个端口只能被一个程序占用,重复绑定抛出异常。
2.3 要素 3:通信协议(数据传输规则)
规定数据打包、发送、接收、校验统一标准,Java 网络两大核心协议:UDP、TCP
| 协议 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| UDP | 面向无连接 | 发送前不建立连接,速度快;单包最大 64KB;无校验易丢包 | 直播、语音通话、游戏实时消息 |
| TCP | 面向连接 | 三次握手建立、四次挥手断开;无数据大小限制,安全可靠 | 文件传输、网页、数据库交互 |
2.4 小结
IP 找设备,端口找设备内程序,协议规定传输规则,三者配合完成网络通信。
三、UDP 协议收发数据
3.1 UDP 核心特性
无连接、数据打包成数据包传输,类比快递:只打包投递,不确认对方是否签收。核心类:
DatagramSocket:收发站点(快递网点)DatagramPacket:数据包(快递包裹,存放字节数据、目标 IP 端口)
3.2 UDP 发送端执行步骤
-
创建
DatagramSocket发送对象; -
将字符串转为字节数组,封装
DatagramPacket数据包(绑定目标 IP、端口); -
调用
socket.send(数据包)发送; -
关闭 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 接收端执行步骤
-
创建
DatagramSocket,绑定监听端口; -
定义空字节数组,创建空数据包;
-
socket.receive(数据包)阻塞等待接收; -
从数据包取出字节,转为字符串打印;
-
关闭资源。
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:
Socket:客户端套接字(主动发起连接)ServerSocket:服务端套接字(被动监听客户端请求)
4.2 三次握手(建立连接)
- 客户端发送连接请求;
- 服务端回复确认收到;
- 客户端再次确认,双向通道建立完成。
4.3 四次挥手(断开连接)
- 客户端发起关闭请求;
- 服务回复收到关闭通知,继续处理剩余数据;
- 服务端数据处理完毕,发送关闭通知;
- 客户端确认断开,连接彻底销毁。
4.4 TCP 客户端流程
-
Socket(IP,端口)创建客户端,主动连接服务端; -
getOutputStream()获取输出流向服务端发数据; -
getInputStream()获取输入流读取服务端返回; -
通信结束关闭 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 服务端流程
-
ServerSocket(端口)创建服务端,绑定监听端口; -
accept()阻塞等待客户端连接,返回 Socket 对象; -
通过 Socket 获取输入输出流完成数据交互;
-
逐层关闭流、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;三次握手建连、四次挥手断连,数据安全无上限,适合文件、网页等可靠传输场景。
五、全文总结
- 网络编程作用:跨设备程序数据交互,分 CS、BS 两种架构;
- 网络三要素:IP 区分设备、端口区分程序、协议规范传输;
- IP:IPv4 局域网私有段 192.168,本地回环 127.0.0.1;
- 端口:0~1023 系统占用,开发使用 1024 以上;
- UDP:无连接,DatagramSocket+DatagramPacket,速度快、上限 64KB、易丢包;
- TCP:面向连接,Socket 客户端 / ServerSocket 服务端,三次握手、四次挥手,数据可靠无大小限制。
拓展学习建议
- 先运行 UDP 收发案例,观察无连接通信特点;
- 调试 TCP 客户端服务端代码,理解阻塞 accept 等待逻辑;
- 扩展实战:TCP 文件上传、UDP 简易聊天室;
- 区分两种协议使用场景,理解丢包与可靠传输取舍。
入门面试高频考点
- CS 与 BS 架构区别;
- 网络通信三要素作用;
- IPv4 私有地址、本地回环地址含义;
- UDP 和 TCP 核心区别、适用场景;
- UDP 两大核心类、TCP 客户端与服务端类;
- TCP 三次握手、四次挥手作用。