AWT客户端/服务器GUI计算器:两数求和功能实现求助
基于AWT的客户端/服务器架构求和计算器实现方案
首先,我们先完善你提供的服务器端代码——它已经搭建了基础的Socket连接,但还缺少处理求和请求的核心逻辑。
一、完成服务器端代码
你的现有代码已经创建了ServerSocket并接受连接,接下来需要读取客户端发送的两个数字,计算求和结果后返回给客户端。这里我们使用DataInputStream和DataOutputStream来处理数据传输,确保类型安全:
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { // 监听8080端口 try (ServerSocket server = new ServerSocket(8080); Socket connection = server.accept(); DataInputStream dis = new DataInputStream(connection.getInputStream()); DataOutputStream dos = new DataOutputStream(connection.getOutputStream())) { System.out.println("客户端连接成功!"); // 读取客户端发送的两个数字 double num1 = dis.readDouble(); double num2 = dis.readDouble(); // 计算求和结果 double sum = num1 + num2; // 将结果发送回客户端 dos.writeDouble(sum); System.out.printf("已处理请求:%.2f + %.2f = %.2f%n", num1, num2, sum); } catch (IOException e) { e.printStackTrace(); } } }
服务器代码说明:
- 使用try-with-resources自动关闭所有资源(ServerSocket、Socket、输入输出流),避免资源泄漏
- 调用
dis.readDouble()读取客户端发送的两个浮点数(如果需要整数可以改用readInt()) - 计算求和后通过
dos.writeDouble()将结果返回客户端
二、实现AWT客户端GUI
接下来我们创建一个带有AWT界面的客户端,包含输入框、计算按钮和结果展示区域,点击按钮时向服务器发送请求并展示结果:
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; public class CalculatorClient extends Frame implements ActionListener { private TextField num1Field; private TextField num2Field; private Label resultLabel; private Button calculateBtn; public CalculatorClient() { // 设置窗口属性 setTitle("客户端求和计算器"); setSize(350, 150); setLayout(new FlowLayout(FlowLayout.CENTER, 10, 20)); setLocationRelativeTo(null); // 居中显示 setVisible(true); // 创建组件 num1Field = new TextField(10); num2Field = new TextField(10); resultLabel = new Label("结果:"); calculateBtn = new Button("计算求和"); // 添加组件到窗口 add(new Label("第一个数:")); add(num1Field); add(new Label("第二个数:")); add(num2Field); add(calculateBtn); add(resultLabel); // 绑定按钮点击事件 calculateBtn.addActionListener(this); // 窗口关闭事件处理 addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == calculateBtn) { try { // 获取输入的数字 double num1 = Double.parseDouble(num1Field.getText()); double num2 = Double.parseDouble(num2Field.getText()); // 连接服务器(localhost对应本地服务器,若服务器在其他机器需改IP) try (Socket socket = new Socket("localhost", 8080); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); DataInputStream dis = new DataInputStream(socket.getInputStream())) { // 发送数字到服务器 dos.writeDouble(num1); dos.writeDouble(num2); // 读取服务器返回的结果 double sum = dis.readDouble(); resultLabel.setText(String.format("结果:%.2f", sum)); } catch (Exception ex) { resultLabel.setText("错误:连接服务器失败"); ex.printStackTrace(); } } catch (NumberFormatException ex) { resultLabel.setText("错误:请输入有效的数字"); } } } public static void main(String[] args) { // 在AWT事件线程中创建GUI EventQueue.invokeLater(CalculatorClient::new); } }
客户端代码说明:
- 使用AWT的
Frame作为主窗口,搭配TextField、Label、Button构建界面 ActionListener处理按钮点击事件,获取输入内容并验证格式- 通过Socket连接服务器,发送两个数字后接收求和结果并更新界面
- 处理可能的异常:格式错误、连接失败等,给用户友好提示
三、运行步骤
- 先启动
Server类,控制台会显示等待客户端连接 - 启动
CalculatorClient类,打开GUI窗口 - 在输入框中输入两个数字,点击「计算求和」按钮,即可看到结果
这样就能完成一个简单的基于AWT的客户端/服务器求和计算器啦!
内容的提问来源于stack exchange,提问作者Vlad Murea
相关产品推荐
相关产品推荐

