Photo by Lorem Ipsum
481 words
2 minutes
Java SE 系列(九):网络编程
Java SE 教程
Posts in this series (10)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/