1、题要求(必做):
(1) 已知client端,提交计算表达式请求,如:3+4
(2)在server服务器端完成运算并将结果返回给client端
(3)使用TCP/IP的套接字编程完成程序
(4)能反复运算
服务器端代码
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(12345); // 创建服务器Socket,监听端口12345
System.out.println("Server started, waiting for client...");
while (true) {
Socket clientSocket = serverSocket.accept(); // 监听客户端连接
System.out.println("Client connected: " + clientSocket);
// 创建线程处理客户端请求
Thread thread = new Thread(() -> {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);
while (true) {
String expression = reader.readLine(); // 读取客户端发送的表达式
if (expression == null || expression.equals("exit")) {
break;
}
// 计算表达式
int result = calculate(expression);
// 返回结果给客户端
writer.println("Result: " + result);
}
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
});
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 计算表达式
private static int calculate(String expression) {
String[] tokens = expression.split("\\+");
int operand1 = Integer.parseInt(tokens[0]);
int operand2 = Integer.parseInt(tokens[1]);
return operand1 + operand2;
}
}
客户端代码
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 12345); // 连接服务器
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
BufferedReader serverReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
System.out.print("Enter expression (e.g., 3+4), or type 'exit' to quit: ");
String expression = reader.readLine();
if (expression.equals("exit")) {
writer.println("exit");
break;
}
// 发送表达式给服务器
writer.println(expression);
// 接收并打印服务器返回的结果
String result = serverReader.readLine();
System.out.println("Server response: " + result);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
可以根据需要修改calculate
方法来支持更多的运算,比如减法、乘法、除法等