Java网络编程:构建网络应用
Java网络编程:构建网络应用
概述
Java网络编程提供了丰富的API来实现网络通信,包括Socket编程、HTTP客户端等。掌握网络编程是开发分布式应用的基础。
1. TCP通信
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器启动,等待连接...");
while (true) {
Socket socket = serverSocket.accept();
new Thread(() -> handleClient(socket)).start();
}
}
private static void handleClient(Socket socket) {
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(
socket.getOutputStream(), true)) {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("收到: " + message);
writer.println("回复: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8888);
try (PrintWriter writer = new PrintWriter(
socket.getOutputStream(), true);
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedReader console = new BufferedReader(
new InputStreamReader(System.in))) {
String input;
while ((input = console.readLine()) != null) {
writer.println(input);
String response = reader.readLine();
System.out.println("服务器: " + response);
}
}
}
}
2. UDP通信
import java.net.*;
public class UDPReceiver {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(9999);
byte[] buffer = new byte[1024];
System.out.println("等待接收数据...");
while (true) {
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到来自 " + packet.getAddress() + ": " + message);
}
}
}
import java.net.*;
public class UDPSender {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket();
InetAddress address = InetAddress.getByName("localhost");
String message = "Hello UDP!";
byte[] data = message.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, address, 9999);
socket.send(packet);
System.out.println("发送完成");
socket.close();
}
}
3. HTTP客户端
import java.net.http.*;
import java.net.URI;
public class HTTPClientDemo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.header("Accept", "application/json")
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println("状态码: " + response.statusCode());
System.out.println("响应: " + response.body());
}
}
最佳实践
- 使用try-with-resources:自动关闭网络资源
- 处理超时:设置合理的连接和读取超时
- 使用NIO:处理高并发网络请求
- 异常处理:捕获和处理网络异常
- 资源释放:及时关闭Socket和流
总结
Java网络编程是构建分布式应用的基础,掌握TCP/UDP通信和HTTP客户端的使用,可以开发出高效的网络应用。合理处理网络异常和资源管理,是编写可靠网络程序的关键。