← 返回首页

Java网络编程:构建网络应用

📂 java ⏱ 2 min 316 words

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());
    }
}

最佳实践

  1. 使用try-with-resources:自动关闭网络资源
  2. 处理超时:设置合理的连接和读取超时
  3. 使用NIO:处理高并发网络请求
  4. 异常处理:捕获和处理网络异常
  5. 资源释放:及时关闭Socket和流

总结

Java网络编程是构建分布式应用的基础,掌握TCP/UDP通信和HTTP客户端的使用,可以开发出高效的网络应用。合理处理网络异常和资源管理,是编写可靠网络程序的关键。