使用javaGUI实现服务端界面(相当于老师),有文本输入框、发送按钮、接收消息的文本区 域; 2.客户端界面(相当于学生),有 IP 地址输入框、端口号输入框、连接按钮、 文本输入框、发送按钮、接收消息的文本区域; 3.在运算系统中增加一个"提问"按钮,点击该按钮后,打开客户端对话窗口; 4.服务端与客户端相互独立,先启动服务端,然后客户端才能连接到服务端; 5.实现一对一的服务端与客户端对话功能。无论是客户端还是服务端,发送 消息后,首先在消息区显示发送的消息,然后清空输入框中的数据。消息接收端 也要在消息区显示接收到的消息。给出具体代码

时间: 2024-04-07 08:29:30 浏览: 19
好的,以下是使用Java GUI实现服务端与客户端通信的具体代码实现: 服务端代码: ``` import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Server extends JFrame implements ActionListener, Runnable { private static final long serialVersionUID = 1L; private JTextField inputField; private JTextArea messageArea; private JButton sendButton; private ServerSocket serverSocket; private Socket clientSocket; private BufferedReader in; private PrintWriter out; public Server() { super("Server"); // 创建输入框、文本区域和发送按钮 inputField = new JTextField(30); messageArea = new JTextArea(10, 30); sendButton = new JButton("发送"); // 将输入框和发送按钮添加到面板中 JPanel inputPanel = new JPanel(); inputPanel.add(inputField); inputPanel.add(sendButton); // 将消息区添加到滚动面板中 JScrollPane scrollPane = new JScrollPane(messageArea); // 将面板添加到窗口中 add(inputPanel, BorderLayout.NORTH); add(scrollPane, BorderLayout.CENTER); // 添加事件监听器 inputField.addActionListener(this); sendButton.addActionListener(this); // 设置窗口大小和可见性 setSize(400, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { // 获取输入框中的文本 String message = inputField.getText(); // 将消息显示在消息区中 messageArea.append("服务端: " + message + "\n"); // 将消息发送给客户端 out.println(message); out.flush(); // 清空输入框中的文本 inputField.setText(""); } @Override public void run() { try { // 监听指定的端口号 serverSocket = new ServerSocket(8888); messageArea.append("等待客户端连接...\n"); // 等待客户端连接请求 clientSocket = serverSocket.accept(); messageArea.append("客户端已连接!\n"); // 获取输入流和输出流 in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); out = new PrintWriter(clientSocket.getOutputStream()); // 循环读取客户端发送的消息 String message; while ((message = in.readLine()) != null) { // 将消息显示在消息区中 messageArea.append("客户端: " + message + "\n"); } // 关闭输入流和输出流 in.close(); out.close(); // 关闭客户端套接字和服务器套接字 clientSocket.close(); serverSocket.close(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { // 创建服务端窗口 Server server = new Server(); // 启动服务端线程 Thread thread = new Thread(server); thread.start(); } } ``` 客户端代码: ``` import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Client extends JFrame implements ActionListener, Runnable { private static final long serialVersionUID = 1L; private JTextField ipField; private JTextField portField; private JTextField inputField; private JTextArea messageArea; private JButton connectButton; private JButton sendButton; private Socket clientSocket; private BufferedReader in; private PrintWriter out; public Client() { super("Client"); // 创建IP地址输入框、端口号输入框、文本输入框、文本区域和发送按钮 ipField = new JTextField(10); portField = new JTextField(4); inputField = new JTextField(30); messageArea = new JTextArea(10, 30); connectButton = new JButton("连接"); sendButton = new JButton("发送"); // 将输入框和连接按钮添加到面板中 JPanel connectPanel = new JPanel(); connectPanel.add(ipField); connectPanel.add(portField); connectPanel.add(connectButton); // 将输入框和发送按钮添加到面板中 JPanel inputPanel = new JPanel(); inputPanel.add(inputField); inputPanel.add(sendButton); // 将消息区添加到滚动面板中 JScrollPane scrollPane = new JScrollPane(messageArea); // 将面板添加到窗口中 add(connectPanel, BorderLayout.NORTH); add(inputPanel, BorderLayout.SOUTH); add(scrollPane, BorderLayout.CENTER); // 添加事件监听器 connectButton.addActionListener(this); inputField.addActionListener(this); sendButton.addActionListener(this); // 设置窗口大小和可见性 setSize(400, 300); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == connectButton) { // 获取IP地址和端口号 String ipAddress = ipField.getText(); int port = Integer.parseInt(portField.getText()); try { // 连接服务器 clientSocket = new Socket(ipAddress, port); messageArea.append("连接成功!\n"); // 获取输入流和输出流 in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); out = new PrintWriter(clientSocket.getOutputStream()); // 启动客户端线程 Thread thread = new Thread(this); thread.start(); } catch (IOException ex) { ex.printStackTrace(); } } else if (source == sendButton || source == inputField) { // 获取输入框中的文本 String message = inputField.getText(); // 将消息显示在消息区中 messageArea.append("客户端: " + message + "\n"); // 将消息发送给服务端 out.println(message); out.flush(); // 清空输入框中的文本 inputField.setText(""); } } @Override public void run() { try { // 循环读取服务端发送的消息 String message; while ((message = in.readLine()) != null) { // 将消息显示在消息区中 messageArea.append("服务端: " + message + "\n"); } // 关闭输入流和输出流 in.close(); out.close(); // 关闭客户端套接字 clientSocket.close(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { // 创建客户端窗口 Client client = new Client(); } } ``` 希望这些代码可以帮助您实现Java GUI服务端与客户端通信功能。

相关推荐

最新推荐

recommend-type

Java的带GUI界面猜数字游戏的实现示例

主要介绍了Java的带GUI界面猜数字游戏的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例

主要介绍了python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例,需要的朋友可以参考下
recommend-type

python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例

主要介绍了python GUI库图形界面开发PyQt5树形结构控件QTreeWidget详细使用方法与实例,需要的朋友可以参考下
recommend-type

JAVA图形界面(GUI)之表格的示例代码

主要介绍了JAVA图形界面(GUI)之表格的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法

主要介绍了python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB图像处理算法宝典:从理论到实战

![MATLAB图像处理算法宝典:从理论到实战](https://img-blog.csdnimg.cn/20200717112736401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1emhhbzk5MDE=,size_16,color_FFFFFF,t_70) # 1. MATLAB图像处理基础理论 MATLAB图像处理是一种利用MATLAB编程语言进行图像处理的强大工具。它提供了丰富的函数和工具箱,用于图像获取、增强、分
recommend-type

matlab中1/x的非线性规划

在MATLAB中,可以使用非线性规划函数(`fmincon`)来优化一个包含1/x的非线性目标函数。下面是一个简单的例子: ```matlab % 定义目标函数 fun = @(x) 1/x; % 定义约束函数(这里没有约束) nonlcon = []; % 定义初始点 x0 = 1; % 定义优化选项 options = optimoptions('fmincon', 'Display', 'iter'); % 进行非线性规划 [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon, options); ``` 在
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。