这篇文章将深入浅出地讲解 Java 网络编程,从基础概念到实战代码,带你逐步了解如何使用 Java 建立网络应用程序。
网络编程的核心在于网络协议,它们规定了网络数据传输的规则,最常见的两种是 TCP (Transmission Control Protocol,传输控制协议) 和 UDP (User Datagram Protocol,用户数据报协议)。
TCP 就像是一个可靠的快递员,它会仔细检查每个包裹,确保包裹完整无缺地送到目的地。特点:
UDP 就像是一个快递员,它只负责将包裹快速送到目的地,而不关心包裹是否完整,也可能丢失包裹。特点:
举例说明:
形象比喻:
Socket 类是 Java 中用于建立 TCP 连接的核心类,它代表网络中两个应用程序之间通信的端点。
代码示例:(先运行服务器再运行客户端)
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) throws IOException {
// 1. 创建 Socket 对象,指定服务器 IP 地址和端口号
Socket socket = new Socket("127.0.0.1", 8080); // 连接本地服务器 8080 端口
// 2. 获取输入流和输出流,用于与服务器通信
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 设置 autoflush
// 3. 发送数据到服务器
out.println("Hello, server!");
// 4. 接收服务器返回的数据
String response = in.readLine();
System.out.println("Server response: " + response);
// 5. 关闭连接
socket.close();
}
}
代码解释:
服务器代码:
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
// 1. 创建 ServerSocket 对象,指定监听端口号
ServerSocket serverSocket = new ServerSocket(8080);
// 2. 监听连接请求
Socket socket = serverSocket.accept(); // 阻塞等待连接请求
// 3. 获取输入流和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// 4. 读取客户端发送的数据
String request = in.readLine();
System.out.println("Client request: " + request);
// 5. 发送数据到客户端
out.println("Hello, client!");
// 6. 关闭连接
socket.close();
serverSocket.close();
}
}
代码解释:
DatagramPacket 类用于实现 UDP 通信,它代表 UDP 中发送或接收的数据报。
代码示例:(先运行服务器再运行客户端)
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
// 1. 创建 DatagramSocket 对象,指定端口号
DatagramSocket socket = new DatagramSocket();
// 2. 创建 DatagramPacket 对象,用于发送数据
String message = "Hello, server!";
byte[] buffer = message.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1"); // 服务器 IP 地址
int port = 8080; // 服务器端口号
DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, address, port);
// 3. 发送数据
socket.send(sendPacket);
// 4. 创建 DatagramPacket 对象,用于接收数据
byte[] receiveBuffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
// 5. 接收数据
socket.receive(receivePacket);
// 6. 解析接收到的数据
String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Server response: " + response);
// 7. 关闭连接
socket.close();
}
}
代码解释:
服务器代码:
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) throws IOException {
// 1. 创建 DatagramSocket 对象,指定监听端口号
DatagramSocket socket = new DatagramSocket(8080);
// 2. 创建 DatagramPacket 对象,用于接收数据
byte[] receiveBuffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
// 3. 接收数据
socket.receive(receivePacket);
// 4. 解析接收到的数据
String request = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Client request: " + request);
// 5. 创建 DatagramPacket 对象,用于发送数据
String message = "Hello, client!";
byte[] buffer = message.getBytes();
InetAddress address = receivePacket.getAddress(); // 获取客户端 IP 地址
int port = receivePacket.getPort(); // 获取客户端端口号
DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, address, port);
// 6. 发送数据
socket.send(sendPacket);
// 7. 关闭连接
socket.close();
}
}
代码解释:
结语:本文详细讲解了 Java 网络编程的基础知识和实战代码,包括 TCP 和 UDP 的区别、网络编程的三要素以及使用 Socket 和 DatagramPacket 类实现网络通信。希望这些内容能够帮助各位看官深入了解 Java 网络编程。感谢各位看官的观看,下期见,谢谢~