481 words
2 minutes
Java SE 系列(九):网络编程

AI 智能总结

Java SE 9 网络编程TCP/UDP + Socket#

网络编程核心是进程间跨设备数据通信,Java 通过 Socket 封装网络交互,主流分为 TCP 可靠传输、UDP 快速传输 两种模式。

一、核心概念#

Socket:网络通信端点,相当于数据收发的 “管道端口”
TCP:面向连接、可靠、有序、三次握手,适合文件、文本传输
UDP:无连接、不可靠、速度快,适合直播、语音、广播

二、TCP 通信(面向连接)#

基于 ServerSocket(服务端)+ Socket(客户端),点对点稳定通信。

TCP 服务端#

public class TcpServer {
public static void main(String[] args) throws IOException {
// 绑定端口,监听客户端连接
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept(); // 阻塞等待连接
// 读取客户端数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
System.out.println("服务端接收:" + msg);
socket.close();
serverSocket.close();
}
}

TCP 客户端#

public class TcpClient {
public static void main(String[] args) throws IOException {
// 连接本机8888端口服务端
Socket socket = new Socket("127.0.0.1", 8888);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("Hello TCP");
bw.flush();
socket.close();
}
}

三、UDP 通信(无连接)#

基于 DatagramSocket 收发数据包,无需建立连接,以数据包为单位传输。

UDP 服务端(接收)#

public class UdpServer {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); // 阻塞接收数据包
String msg = new String(packet.getData(),0,packet.getLength());
System.out.println("UDP接收:" + msg);
socket.close();
}
}

UDP 客户端(发送)#

public class UdpClient {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket();
byte[] data = "Hello UDP".getBytes();
// 指定数据包、目标地址端口
DatagramPacket packet = new DatagramPacket(data,data.length,
InetAddress.getLocalHost(),9999);
socket.send(packet);
socket.close();
}
}

核心区别与总结#

TCP:有连接、可靠、粘包问题,适用于文件传输、网页、接口请求。
UDP:无连接、开销小、可能丢包,适用于实时直播、游戏、广播。
TCP 通过 IO 流持续通信,UDP 通过数据包一次性收发。
通信结束必须关闭 Socket,释放端口资源。

Java SE 系列(九):网络编程
https://fuwari.vercel.app/posts/java-se-series/java-se-09-network/
Author
Zero02
Published at
2025-03-02
License
CC BY-NC-SA 4.0