当然,我可以为您提供一个简单的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"时,双方都会关闭连接并退出。