Java在Ubuntu下的网络编程指南
Java在Ubuntu下的网络编程指南
1. 准备工作:安装Java开发环境
在Ubuntu上进行Java网络编程前,需先安装Java开发工具包(JDK)。推荐使用OpenJDK(开源实现),版本选择11及以上(兼容性好且长期支持)。
打开终端,执行以下命令安装OpenJDK 11:
sudo apt update
sudo apt install openjdk-11-jdk
安装完成后,通过java -version和javac -version验证安装是否成功(显示版本号即为成功)。
2. 创建Java项目目录
在Ubuntu系统中,创建一个专用目录用于存放网络编程项目(如MyJavaNetworkProject),便于管理代码文件:
mkdir MyJavaNetworkProject
cd MyJavaNetworkProject
3. 编写TCP网络程序(基础示例)
TCP是面向连接的可靠协议,适合需要稳定数据传输的场景(如文件传输、聊天应用)。以下是一个简单的“服务器-客户端”TCP通信示例:
(1)TCP服务器端代码(TCPServer.java)
服务器通过ServerSocket监听指定端口(如12345),等待客户端连接。连接成功后,接收客户端发送的消息并回复确认:
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("TCP Server is listening on port " + port);
            while (true) {
    
                Socket clientSocket = serverSocket.accept();
     // 等待客户端连接
                System.out.println("New client connected: " + clientSocket.getInetAddress());
    
                
                // 获取输入/输出流
                InputStream input = clientSocket.getInputStream();
    
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    
                OutputStream output = clientSocket.getOutputStream();
    
                PrintWriter writer = new PrintWriter(output, true);
    
                
                // 接收客户端消息并回复
                String clientMessage;
                while ((clientMessage = reader.readLine()) != null) {
    
                    System.out.println("Received from client: " + clientMessage);
    
                    writer.println("Server received: " + clientMessage);
                    
                    if ("bye".equalsIgnoreCase(clientMessage)) {
     // 客户端发送bye时关闭连接
                        break;
                    }
                }
    
                clientSocket.close();
    
                System.out.println("Client disconnected");
            }
        }
 catch (IOException e) {
    
            System.err.println("Server exception: " + e.getMessage());
    
            e.printStackTrace();
        }
    }
}
    
(2)TCP客户端代码(TCPClient.java)
客户端通过Socket连接到服务器(指定服务器IP和端口),发送消息并接收服务器回复:
import java.io.*;
    
import java.net.*;
public class TCPClient {
    public static void main(String[] args) {
    
        String serverAddress = "localhost";
     // 服务器地址(本地测试用localhost)
        int port = 12345;
 // 服务器端口
        try (Socket socket = new Socket(serverAddress, port)) {
    
            System.out.println("Connected to server: " + socket.getInetAddress());
    
            
            // 获取输入/输出流
            OutputStream output = socket.getOutputStream();
    
            PrintWriter writer = new PrintWriter(output, true);
    
            InputStream input = socket.getInputStream();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    
            
            // 发送消息到服务器并接收回复
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
    
            String userInput;
            do {
    
                System.out.print("Enter message (type 'bye' to exit): ");
    
                userInput = stdIn.readLine();
    
                writer.println(userInput);
     // 发送消息
                String serverResponse = reader.readLine();
     // 接收回复
                System.out.println("Server response: " + serverResponse);
            }
     while (!"bye".equalsIgnoreCase(userInput));
        }
 catch (UnknownHostException e) {
    
            System.err.println("Server not found: " + e.getMessage());
        }
 catch (IOException e) {
    
            System.err.println("I/O error: " + e.getMessage());
        }
    }
}
    
4. 编译与运行程序
在终端中,导航到项目目录(MyJavaNetworkProject),执行以下命令编译和运行程序:
(1)编译Java文件
javac TCPServer.java TCPClient.java
编译成功后,会生成TCPServer.class和TCPClient.class两个字节码文件。
(2)运行服务器端
在终端窗口1中,运行服务器程序:
java TCPServer
控制台会显示“TCP Server is listening on port 12345”,表示服务器已启动并等待客户端连接。
(3)运行客户端
在终端窗口2中,运行客户端程序:
java TCPClient
客户端会连接到服务器,提示“Enter message (type ‘bye’ to exit)”。输入任意消息(如“Hello Server”),服务器会回复“Server received: Hello Server”。输入“bye”可结束连接。
5. 常见问题排查
(1)端口冲突
若启动服务器时报错“Address already in use”,说明端口已被其他程序占用。可通过以下命令查看端口占用情况:
sudo lsof -i :12345
若需更换端口,修改代码中的port变量(如改为8080)即可。
(2)防火墙阻止
若客户端无法连接服务器,可能是Ubuntu防火墙(ufw)阻止了端口。需开放对应端口:
sudo ufw allow 12345/tcp
然后重启防火墙:
sudo ufw reload
6. 扩展方向
掌握基础TCP编程后,可根据需求扩展以下功能:
- 多线程处理:使用Thread或线程池处理多个客户端连接(避免单线程阻塞)。
- UDP编程:使用DatagramSocket和DatagramPacket实现无连接、快速传输(适合视频流、游戏等场景)。
- Java NIO:使用Selector、Channel和Buffer实现非阻塞IO,提高高并发场景下的性能。
- 安全通信:使用SSL/TLS加密TCP连接(如SSLSocket和SSLServerSocket),保护数据隐私。
通过以上步骤,你可在Ubuntu系统上完成Java网络编程的基础实践,并逐步扩展到更复杂的应用场景。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Java在Ubuntu下的网络编程指南
本文地址: https://pptw.com/jishu/739692.html
