学习通Java作业四Java综合编程

yzdev
2023-04-27 / 7 评论 / 166 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年05月07日,已超过510天没有更新,若内容或图片失效,请留言反馈。
本文共 265 个字数,平均阅读时长 ≈ 1分钟

题目要求

编写带图形界面的聊天程序,实现让客户可以持续地发送消息给服务器,服务器也可以即时看到客户端发送的消息,并回消息给客户端。

运行界面

java综合编程

作答结果

服务器端程序

新建MyServer.java


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


public class MyServer extends JFrame implements ActionListener {
    JTextArea jta;
    JTextField jtf;
    JButton jb;
    JPanel jp;
    ServerSocket ss;
    Socket socket;
    DataOutputStream out;
    DataInputStream in;

    public MyServer() {
        jta = new JTextArea();
        jtf = new JTextField(15);
        jb = new JButton("发送");
        jp = new JPanel();

        jp.add(jtf);
        jp.add(jb);

        JScrollPane jsp = new JScrollPane(jta);
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp, BorderLayout.SOUTH);

        jb.addActionListener(this);
        jtf.addActionListener(this);

        // 展现
        this.setTitle("服务器");
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        // 开放端口
        try {
            ss = new ServerSocket(9000);
            System.out.println("等待连接");
            socket = ss.accept();
            System.out.println("已连接");

            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());
            while (true) {
                // 接受客户端发送数据
                String str = in.readUTF();
                // 显示多行文本框中
                jta.append("客户端说:" + str + "\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new MyServer();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jb || e.getSource() == jtf) {
            // 向客户端发送数据
            try {
                out.writeUTF(jtf.getText());
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            // 向多行文本框输入历史聊天记录信息
            jta.append("服务器说:" + jtf.getText() + "\r\n");
            // 清空单行文本框内容
            jtf.setText("");
        }
    }
}

客户端程序

新建MyClient.java


import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class MyClient extends JFrame implements ActionListener {
    JButton jb;
    JTextArea jta;
    JTextField jtf;
    JPanel jp;
    Socket socket;
    DataOutputStream out;
    DataInputStream in;

    public MyClient() {
        jta = new JTextArea();
        jtf = new JTextField(15);
        jb = new JButton("发送");
        jp = new JPanel();

        jp.add(jtf);
        jp.add(jb);

        JScrollPane jsp = new JScrollPane(jta);
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp, BorderLayout.SOUTH);

        jb.addActionListener(this);
        jtf.addActionListener(this);

        // 展现
        this.setTitle("客户端");
        this.setSize(300, 200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        try {
            // 建立连接
            socket = new Socket("127.0.0.1", 9000);
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());

            while (true) {
                // 接受服务器发送数据
                String str = in.readUTF();
                // 显示在多行文本框
                jta.append("服务器说:" + str + "\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new MyClient();
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jb || e.getSource() == jtf) {
            // 向服务器发送数据
            try {
                out.writeUTF(jtf.getText());
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            // 显示在多行文本框
            jta.append("客户端说:" + jtf.getText() + "\r\n");
            // 清空单行文本框
            jtf.setText("");
        }
    }
}

运行方法

先运行MyServer.java,后运行MyClient.java

运行截图

java多线程

3

打赏

海报

正在生成.....

评论 (7)

语录
取消
  1. 头像
    伽码 Lv.1
    ·Windows 10 · Google Chrome
    沙发

    你逆光而来,配得上世间所有的美好。

    回复 删除 垃圾
  2. 头像
    Halo Lv.1
    ·Windows 10 · Google Chrome
    板凳

    不要祈求生活公平,只需要适应它。

    回复 删除 垃圾
  3. 头像
    勺子 Lv.1
    ·Windows 10 · Google Chrome
    地毯

    我们在年少时并不知道,有些乐章一旦开始,唱的就是曲终人散。

    回复 删除 垃圾
  4. 头像
    Richer Chen Lv.3
    ·Windows 10 · Google Chrome
    第4楼

    如果命运扼住了你的喉咙,那你就挠命运的胳肢窝。

    回复 删除 垃圾
  5. 头像
    Richer Chen Lv.3
    ·Windows 10 · Google Chrome
    第5楼

    人恰得亏,戏不好看。

    回复 删除 垃圾
  6. 头像
    乔某 Lv.1
    ·Windows 10 · Google Chrome
    第6楼

    表情

    回复 删除 垃圾
    1. 头像
      firemen Lv.1
      ·Windows 10 · Google Chrome
      @ 乔某

      Σ(っ °Д °;)っ

      回复 删除 垃圾