简单的java socket客户端和服务端示例


当然,我可以为您提供一个简单的Java Socket客户端和服务端的示例。以下是代码:

### 服务端(Server.java)


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(5000)) {
            System.out.println("Server is running and listening on port 5000...");
            
            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();
            System.out.println("Client connected!");

            // 获取输入和输出流
            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("Received: " + inputLine);
                // 可以处理输入或回复客户端
                out.println("Echo: " + inputLine);

                // 假设客户端发送"exit"时关闭连接
                if ("exit".equalsIgnoreCase(inputLine)) {
                    break;
                }
            }

            // 关闭资源
            in.close();
            out.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

### 客户端(Client.java)


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

public class Client {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 5000)) {
            // 获取输出和输入流
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            // 向服务端发送数据
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String userInput;

            System.out.println("Enter messages (type 'exit' to quit):");
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);

                // 读取服务端响应
                System.out.println("Server: " + in.readLine());

                // 退出条件
                if ("exit".equalsIgnoreCase(userInput)) {
                    break;
                }
            }

            // 关闭资源
            stdIn.close();
            out.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这两个程序分别实现了基本的Socket服务端和客户端。服务端监听5000端口,等待客户端连接。一旦客户端连接,服务端和客户端就可以通过Socket进行数据的发送和接收。客户端发送的数据被服务端读取并打印出来,同时服务端还可以选择性地回复数据给客户端。在这个例子中,服务端简单地回显了客户端发送的数据。客户端则允许用户通过控制台输入数据,并发送到服务端,同时显示服务端回复的数据。当输入"exit"时,双方都会关闭连接并退出。