GDPU Java 天码行空13

news/2024/7/25 20:05:28/文章来源:https://blog.csdn.net/lt6666678/article/details/139295755

(一)实验目的

1、掌握JAVA中与网络程序开发相关的知识点;
2、理解并掌握网络编程开发思想及方法;
3、熟悉项目开发的分包方法和依据;
4、实现聊天室中客服端和服务器端的实现方法;
5、熟悉多线程程序开发方法;
6、完善界面设计。

(二)实验内容和步骤

1、完成聊天程序的服务器端和客服端的界面设计;
2、完成优化聊天程序的服务器端多线程编码;
3、完成与优化聊天程序的客服端编码。

👨‍🏫 参考视频教程
👨‍🏫 代码参考 pxj 佬

💖 ServerChatOnline.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class ServerChatOnline extends JFrame implements ActionListener
{private JTextArea jta;private JScrollPane jsp;private JPanel Jp;private JTextField jtf;private JButton jb;private BufferedWriter bw;private void create_windows(){jta = new JTextArea();// 编辑文本区域不可编辑jta.setEditable(false);// 将文本域丢到滑动条中jsp = new JScrollPane(jta);Jp = new JPanel();jtf = new JTextField(10);jb = new JButton("发送");Jp.add(jtf);Jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(Jp, BorderLayout.SOUTH);this.setTitle("聊天室-服务器");this.setSize(300, 300);this.setLocation(300, 300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jta = new JTextArea();// 编辑文本区域不可编辑jta.setEditable(false);// 将文本域丢到滑动条中jsp = new JScrollPane(jta);Jp = new JPanel();jtf = new JTextField(10);jtf.addKeyListener(new KeyAdapter(){@Overridepublic void keyPressed(KeyEvent e){if (e.getKeyCode() == 10){String text = jtf.getText();text = "s:" + text;jta.append(text + "\n");try{bw.write(text);bw.newLine();bw.flush();jtf.setText("");} catch (IOException ex){ex.printStackTrace();}}}});jb = new JButton("发送");jb.addActionListener(this);Jp.add(jtf);Jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(Jp, BorderLayout.SOUTH);this.setTitle("聊天室-服务器");this.setSize(300, 300);this.setLocation(300, 300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}private void work(){try{// 创建服务端套接字ServerSocket serverSocket = new ServerSocket(10086);// 等待链接Socket socket = serverSocket.accept();// 获取socket输入流BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 获取socket输出流bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String line = null;// 循环读取数据,将其拼接到文本域中while ((line = br.readLine()) != null){// 将传来的数据在文本域中显示出来jta.append(line + System.lineSeparator());}// 关闭socketserverSocket.close();} catch (IOException e){e.printStackTrace();}}public ServerChatOnline(){create_windows();work();}@Overridepublic void actionPerformed(ActionEvent e){String text = jtf.getText();text = "s:" + text;jta.append(text + "\n");try{bw.write(text);bw.newLine();bw.flush();jtf.setText("");} catch (IOException ex){ex.printStackTrace();}}
}

💖 ServerChatOnline.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class ServerChatOnline extends JFrame implements ActionListener
{private JTextArea jta;private JScrollPane jsp;private JPanel Jp;private JTextField jtf;private JButton jb;private BufferedWriter bw;private void create_windows(){jta = new JTextArea();// 编辑文本区域不可编辑jta.setEditable(false);// 将文本域丢到滑动条中jsp = new JScrollPane(jta);Jp = new JPanel();jtf = new JTextField(10);jb = new JButton("发送");Jp.add(jtf);Jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(Jp, BorderLayout.SOUTH);this.setTitle("聊天室-服务器");this.setSize(300, 300);this.setLocation(300, 300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jta = new JTextArea();// 编辑文本区域不可编辑jta.setEditable(false);// 将文本域丢到滑动条中jsp = new JScrollPane(jta);Jp = new JPanel();jtf = new JTextField(10);jtf.addKeyListener(new KeyAdapter(){@Overridepublic void keyPressed(KeyEvent e){if (e.getKeyCode() == 10){String text = jtf.getText();text = "s:" + text;jta.append(text + "\n");try{bw.write(text);bw.newLine();bw.flush();jtf.setText("");} catch (IOException ex){ex.printStackTrace();}}}});jb = new JButton("发送");jb.addActionListener(this);Jp.add(jtf);Jp.add(jb);this.add(jsp, BorderLayout.CENTER);this.add(Jp, BorderLayout.SOUTH);this.setTitle("聊天室-服务器");this.setSize(300, 300);this.setLocation(300, 300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}private void work(){try{// 创建服务端套接字ServerSocket serverSocket = new ServerSocket(10086);// 等待链接Socket socket = serverSocket.accept();// 获取socket输入流BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 获取socket输出流bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String line = null;// 循环读取数据,将其拼接到文本域中while ((line = br.readLine()) != null){// 将传来的数据在文本域中显示出来jta.append(line + System.lineSeparator());}// 关闭socketserverSocket.close();} catch (IOException e){e.printStackTrace();}}public ServerChatOnline(){create_windows();work();}@Overridepublic void actionPerformed(ActionEvent e){String text = jtf.getText();text = "s:" + text;jta.append(text + "\n");try{bw.write(text);bw.newLine();bw.flush();jtf.setText("");} catch (IOException ex){ex.printStackTrace();}}
}

💖 ChatOnlineDemo.java

public class ChatOnlineDemo
{public static void main(String[] args){new Thread(new Thread1()).start();new Thread(new Thread2()).start();}
}class Thread1 implements Runnable
{@Overridepublic synchronized void run(){ServerChatOnline S = new ServerChatOnline();}
}class Thread2 implements Runnable
{@Overridepublic synchronized void run(){ClientChatOnline C = new ClientChatOnline();}
}

🏆 运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1054471.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端 |【JavaScript】JS 删除数组中某个元素的方法有哪些?超简洁六大方法!

一、length属性 在JavaScript中,length属性用于获取数组的长度。可用于删除数组中的最后一个元素,只需将长度减1即可。 // 创建一个数组 var a [1, 2, 3, 4, 5]; // 使用length属性获取数组长度 console.log(a.length); // 输出:5 a.lengt…

工业采集网关的功能主要有哪些?为企业带来哪些价值提升?天拓四方

一、行业背景 随着工业领域的快速发展,尤其是智能制造的兴起,工业自动化、智能化和数字化已成为工业转型升级的必然趋势。在这一进程中,工业数据采集和处理扮演着至关重要的角色。作为连接工业现场设备、传感器与上层管理系统的桥梁&#xf…

喜讯 国信华源荣获中国安全科技进步奖二等奖

喜讯!喜讯! 近日,由北京国信华源科技有限公司携手中国地质环境监测院等单位共同参与完成的《基于云端协同的突发性地质灾害三维场景模型构建与动力学模拟关键技术研究》项目荣获中国安全生产协会颁发的“第四届安全科技进步奖二等奖”荣誉证…

数据结构(一)顺序表

目录 一、概念(一)数据结构的三元素1. 逻辑结构(1)线性结构(2)非线性结构 2. 存储结构(1)顺序存储(2)链式存储(3)索引存储 3. 运算 &a…

【C++】<图形库> 三人成棋(面向对象写法)

目录 一、游戏需求 二、程序架构 三、代码实现 四、实现效果 五、已知BUG 一、游戏需求 构建一个五子棋游戏,在自定义棋盘宽度和高度的基础上,实现三人对战功能,并且能判定谁输谁赢。 二、程序架构 (1) 对象分析: 【1】 需…

mysql去除重复数据

需求描述 doc表有很多重复的title,想去除掉重复的记录 表结构 CREATE TABLE doc (id INT PRIMARY KEY,title VARCHAR(255),content TEXT );去重SQL -- 创建临时表 CREATE TEMPORARY TABLE temp_doc AS SELECT * FROM doc WHERE 10;-- 插入唯一的记录(每个title最…

MiniPCIe/SATA双用插槽无法识别minipcie模块怎么回事!

在计算机和嵌入式系统设计中,MiniPCIe/SATA双用插槽作为一种高度集成的解决方案,提供了极大的灵活性与扩展能力。它不仅能够支持MiniPCIe接口的无线网卡、固态硬盘控制器等模块,还能适应SATA接口的硬盘或固态存储设备,大大丰富了系统配置的可能性。尽管设计初衷良好,但在实…

三方语言中调用, Go Energy GUI编译的dll动态链接库CEF

如何在其它编程语言中调用energy编译的dll动态链接库,以使用CEF 或 LCL库 Energy是Go语言基于LCL CEF开发的跨平台GUI框架, 具有很容易使用CEF 和 LCL控件库 interface 便利 示例链接 正文 为方便起见使用 python 调用 go energy 编译的dll 准备 系统&#x…

ubuntu server版 虚拟机根目录磁盘扩容

之前一直使用桌面版ubuntu,因为项目原因需要拉取的代码太大了且项目比较多选择了体量更小的Ubuntu server版,在使用中发现根目录的磁盘很快就用满了 如上,明明分配的300G但是/dev/mapper/ubuntu--vg-ubuntu--lv 只有98G都用满了 server版本与桌面版不同的是在server版安装的时…

【python】numpy库计算矩阵特征值和特征向量

目录 0.环境 1.前提 2.全部代码 0.环境 windows eclipse python 1.前提 我的邻接矩阵是固定的,11*11 2.全部代码 要将邻接矩阵使用numpy赋值 #计算矩阵特征值 import numpy as np A np.array([[0,1,1,1,1,1,1,1,1,1,1], [1,0,0,0,0,0,0,0,0,0,0], [1,0,0,0…

9.1 Go语言入门(环境篇)

Go语言入门(环境篇) 目录一、什么是Go语言二、下载安装配置Go语言开发环境1. 下载2. 安装3. 配置环境变量4. 安装环境验证 三、 开发工具1. 下载2. 安装3. 激活4. 配置SDK 四、 创建go工程文件并运行1. 创建go工程2. 示例代码3. 运行代码 目录 一、什么…

AI时代的服装设计师--AIGC

AI时代的服装设计师--AIGC AIGCAIGC设计能替代真正的设计师吗森马T恤设计AIGC优势、优化 本文记录于去年参加的一次森马T恤设计活动的感受。 AIGC 可以说,近期以来,随着ChatGPT的不断发展,从ChatGPT-3到ChatGPT-4的飞速发展,AIGC…

【最优化方法】实验三 无约束最优化方法的MATLAB实现

实验的目的和要求:通过本次实验使学生进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。 实验内容: 1、最速下降法的MATLAB实现 2、牛顿法的MATLAB实现 3、共轭梯度法的MATLAB…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说,远程访问的便利性提供了许多机会和可能性。作为一种高效的工具,【天联】具有广泛的应用场景,可以实现异地统一管理、协同办公以及远程数据采集…

Jmeter 安装教程:简单易懂

随着互联网的不断发展,网站和应用程序的性能测试变得越来越重要。Apache JMeter 是一款广泛使用的性能测试工具,它强大且使用广泛,适用于各种性能测试需求。不论你是刚刚接触性能测试的新手,还是一位有经验的测试工程师&#xff0…

从零开始实现自己的串口调试助手(1) - ui界面搭建

UI 界面搭建 ui界面整体演示 ui对象拆分 更多的细节就不方便展开了,下面有提示完成ui设计的提示 在创建工程前 记得把编码改为utf-8 ui设计技巧: ctrl 鼠标左键实现拖动实现复制粘贴 groupBox : 带标题的文本框 栅格布局 -- 只有一个控件的时候会铺满…

4. C++网络编程-TCP客户端的实现

TCP Client网络编程基本步骤 创建socket&#xff0c;指定使用TCP协议使用connect连接服务器使用recv/send接收/发送数据关闭socket TCP-connect连接请求 !man 2 connect #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sock…

【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)

文章目录 &#x1f680;Linux基础命令⭐1. 查看目录命令&#x1f4a5;2. 切换目录&#x1f44a;3. 创建目录❤️4. 删除目录/文件&#x1f6b2;5. 修改目录/文件&#x1f308;6. 拷贝目录/文件 &#x1f680;Linux基础命令 ⭐1. 查看目录命令 在Linux中&#xff0c;查看目录的…

qt5core.dll怎么下载,qt5core.dll下载安装详细教程

不知道大家有没有遇到过qt5core.dll丢失这个问题&#xff1f;目前这个问题还是比较常见的&#xff0c;一般使用电脑比较多的的人&#xff0c;有很大几率遇到这种qt5core.dll丢失的问题。今天主要针对这个问题&#xff0c;来给大家讲解一下一键修复qt5core.dll的方法。 Qt5Core.…

【Pandas】深入解析`pd.read_json()`函数

【Pandas】深入解析pd.read_json()函数 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#x…