40什么是 Java 的网络编程?

约 264 个字 61 行代码 预计阅读时间 2 分钟

这题一般会出现在笔试题中,例如让你手写一个基于 Java 实现网络通信的代码。

Java 的网络编程主要利用 java.net 包,它提供了用于网络通信的基本类和接口。

Java 网络编程的基本概念: - IP 地址:用于标识网络中的计算机。 - 端口号:用于标识计算机上的具体应用程序或进程。 - Socket(套接字):网络通信的基本单位,通过 IP 地址和端口号标识。 - 协议:网络通信的规则,如 TCP(传输控制协议)和 UDP(用户数据报协议)。

Java 网络编程的核心类: - Socket:用于创建客户端套接字。 - ServerSocket:用于创建服务器套接字。 - DatagramSocket:用于创建支持 UDP 协议的套接字。 - URL:用于处理统一资源定位符。 - URLConnection:用于读取和写入 URL 引用的资源。

示例代码参考(以下代码时基于 TCP 通信的,一般笔试考察的都是 TCP):

服务端代码:

import java.io.*;
import java.net.*;

public class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            System.out.println("Server is listening on port 8080");

            while (true) {
                Socket socket = serverSocket.accept();
                //异步处理,优化可以用线程池
                new ServerThread(socket).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class ServerThread extends Thread {
    private Socket socket;

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        try (PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {

            // 读取客户端消息
            String message = in.readLine();
            System.out.println("Received: " + message);

            // 响应客户端
            out.println("Hello, client!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码:

import java.io.*;
import java.net.*;

public class TCPClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8080);
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {

            // 发送消息给服务器
            out.println("Hello, server!");

            // 接收服务器的响应
            String response = in.readLine();
            System.out.println("Server response: " + response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}