linux

Linux环境下Java如何进行网络编程

小樊
47
2025-07-01 03:41:29
栏目: 编程语言

在Linux环境下进行Java网络编程,主要涉及到使用Java的网络库,如java.net包中的类和接口。以下是一些基本步骤和示例代码,帮助你在Linux环境下进行Java网络编程。

1. 创建一个简单的TCP服务器

服务器端代码

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

public class TCPServer {
    public static void main(String[] args) {
        int port = 12345; // 服务器监听的端口

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("服务器已启动,正在监听端口 " + port);

            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("新客户端连接: " + clientSocket.getInetAddress().getHostAddress());

                // 处理客户端请求
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("收到客户端消息: " + inputLine);
                    out.println("服务器已收到: " + inputLine);
                }

                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码

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

public class TCPClient {
    public static void main(String[] args) {
        String hostname = "localhost"; // 服务器地址
        int port = 12345; // 服务器监听的端口

        try (Socket socket = new Socket(hostname, port)) {
            System.out.println("已连接到服务器 " + hostname + ":" + port);

            BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            String userInputLine;
            while ((userInputLine = userInput.readLine()) != null) {
                out.println(userInputLine);
                System.out.println("服务器回复: " + in.readLine());
            }
        } catch (UnknownHostException e) {
            System.err.println("未知主机: " + hostname);
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 创建一个简单的UDP服务器

服务器端代码

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

public class UDPServer {
    public static void main(String[] args) {
        int port = 12345; // 服务器监听的端口

        try (DatagramSocket socket = new DatagramSocket(port)) {
            System.out.println("UDP服务器已启动,正在监听端口 " + port);

            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            while (true) {
                socket.receive(packet);
                String received = new String(packet.getData(), 0, packet.getLength());
                System.out.println("收到客户端消息: " + received);

                // 发送回复
                String reply = "服务器已收到: " + received;
                DatagramPacket replyPacket = new DatagramPacket(reply.getBytes(), reply.length(), packet.getAddress(), packet.getPort());
                socket.send(replyPacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端代码

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

public class UDPClient {
    public static void main(String[] args) {
        String hostname = "localhost"; // 服务器地址
        int port = 12345; // 服务器监听的端口

        try (DatagramSocket socket = new DatagramSocket()) {
            InetAddress address = InetAddress.getByName(hostname);

            BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
            String userInputLine;
            while ((userInputLine = userInput.readLine()) != null) {
                byte[] buffer = userInputLine.getBytes();
                DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, port);
                socket.send(packet);

                byte[] replyBuffer = new byte[1024];
                DatagramPacket replyPacket = new DatagramPacket(replyBuffer, replyBuffer.length);
                socket.receive(replyPacket);
                String received = new String(replyPacket.getData(), 0, replyPacket.getLength());
                System.out.println("服务器回复: " + received);
            }
        } catch (UnknownHostException e) {
            System.err.println("未知主机: " + hostname);
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 运行程序

  1. 在Linux终端中编译Java代码:

    javac TCPServer.java
    javac TCPClient.java
    
  2. 启动服务器:

    java TCPServer
    
  3. 在另一个终端中启动客户端:

    java TCPClient
    

对于UDP服务器和客户端,步骤类似:

  1. 编译:

    javac UDPServer.java
    javac UDPClient.java
    
  2. 启动UDP服务器:

    java UDPServer
    
  3. 在另一个终端中启动UDP客户端:

    java UDPClient
    

通过这些步骤,你可以在Linux环境下进行基本的Java网络编程。根据需求,你可以进一步扩展和优化这些示例代码。

0
看了该问题的人还看了