You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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连接服务器,发送两个数字后接收求和结果并更新界面
  • 处理可能的异常:格式错误、连接失败等,给用户友好提示

三、运行步骤

  1. 先启动Server类,控制台会显示等待客户端连接
  2. 启动CalculatorClient类,打开GUI窗口
  3. 在输入框中输入两个数字,点击「计算求和」按钮,即可看到结果

这样就能完成一个简单的基于AWT的客户端/服务器求和计算器啦!

内容的提问来源于stack exchange,提问作者Vlad Murea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:29:19