GDPU Java 天码行空13

(一)实验目的

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.mzph.cn/web/18825.shtml

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

相关文章

Kinetix5700罗克韦尔AB伺服驱动器维修2198-D020-ERS3

Allen-Bradley罗克韦尔运动控制/伺服驱动器维修Kinetix 5700/Kinetix 6000/Kinetix 5500等系列电机驱动器/运动控制系统维修。 AB驱动器的控制接口有两种类型: 类型1:脉冲接口 类型2:模拟量接口 大部分小型PLC和伺服驱动器的链接方式都是开…

通过vlan实现同一网段下的网络隔离

现有两个电脑通过交换机直接连接在一起 pc1&#xff1a; pc2&#xff1a; 正常状态下是可以ping成功的 现在先进入交换机命令行界面&#xff0c;创建两个vlan <Huawei>system-view Enter system view, return user view with CtrlZ. [Huawei]vlan 10 [Huawei-vlan10…

2024年西安交通大学程序设计校赛

A题 签到题 代码如下 //A #include<iostream> #include<algorithm> #define int long long #define endl \n #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); using namespace std; signed main() {IOSint a,b,c,d;cin>>a>>b>>c…

二叉树介绍及堆

文章目录 树 概念及结构 二叉树 概念及结构 特殊的二叉树 完全二叉树 满二叉树 性质 储存 顺序存储 链式储存 堆 概念及结构 小堆 大堆 建堆 向上调整建堆 向下调整建堆 TOPK问题 法一&#xff1a; 法二&#xff1a; 树 概念及结构 树是一种非线性的数据…

解决word里加入mathtype公式后行间距变大

1.布局>页面设置>文档网格&#xff0c;网格栏选为无网格 2.固定间距

探索标准差与方差的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、标准差与方差的基础理解 代码案例 二、标准差与方差的计算方法 方差的计算 标准差的…

QT——QSlider实现,QT滑动控件的使用

目录 简介滑动块调节两种方法滑动条触发信号量理想滑动块运用&#xff08;参考&#xff09; 简介 QT中滑动条的控件叫QSlider&#xff0c;继承自QAbstractSlider类。 主要用途是通过滑块的滑动的方式在一定范围内调节某个值。根据调节的后得到的结果去执行一些处理&#xff0c…

【AI基础】数据获取与整理、打标、增强方法、增强库imgaug

文章目录 常见的数据集网站爬虫工具使用搜索引起图片爬虫视频网站爬虫 数据整理数据检查和清洗数据去重数据集划分 数据标注数据标注工具 label studio 数据增强什么是数据增强单样本数据增强多样本数据增强样本生成方法数据增强imgaugimgaug 操作imgaug 使用 常见的数据集网站…

这款AI绘画软件,带你快速生成高质量产品效果图!

前言 随着人工智能技术的飞速发展&#xff0c;AI在设计领域的应用越来越广泛&#xff0c;。今天&#xff0c;介绍的一款能够自动生成高质量产品效果图的AI绘画软件——STARTAI。这款软件以其强大的功能和便捷的操作&#xff0c;正在重新定义电商产品效果图的制作流程。 AI局部…

RocketMQ .NET

RocketMQ 是一款由阿里巴巴集团开发并开源给Apache软件基金会的分布式消息及流处理平台。以其高吞吐量、低延迟、高可用性等特点而广受欢迎。支持Java&#xff0c;C, Python, Go, .NET等。 异步解耦&#xff1a;可以实现上游和下游业务系统的松耦合设计&#xff0c;使得服务部…

小红书图文笔记怎么做?纯干货!

小红书图文笔记的制作是一门艺术&#xff0c;它需要结合精美的图片和有价值的内容&#xff0c;以吸引和留住用户的注意力。伯乐网络传媒给大家分享制作小红书图文笔记的干货指南&#xff0c;包括准备、制作、发布和优化的各个环节。 一、准备阶段 确定目标受众&#xff1a;找到…

【NumPy】权威指南:使用NumPy的percentile函数进行百分位数计算

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

研学活动报名二维码怎么制作?

在组织研学活动时&#xff0c;老师们经常面临报名流程繁琐、信息收集不全面、统计工作耗时等问题&#xff1f;如何高效地管理学生的报名信息&#xff0c;确保活动顺利进行呢&#xff1f; 现在我们有了更多的选择。老师们可以快速制作出研学活动的研学活动报名二维码怎么制作&am…

DETR整体模型结构解析

DETR流程 Backbone用卷积神经网络抽特征。最后通过一层1*1卷积转化到d_model维度fm&#xff08;B,d_model,HW&#xff09;。 position embedding建立跟fm维度相同的位置编码(B&#xff0c;d_model,HW&#xff09;。 Transformer Encoder,V为fm&#xff0c;K&#xff0c;Q为fm…

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西&#xff0c;一般问卷中使用到。如果是量表类的数据&#xff0c;其一般是用因子分析这种方法去验证效度水平&#xff0c;其可通过因子分析探究各测量量表的内部结构情况&#xff0c;分析因子分析得到的内部结构与自己预期的内部结构进行对比…

大模型预训练结果到底是什么?

近日参加一个线下 AI 交流会议&#xff0c;会上有个非本行业的老师提问&#xff1a;“大家说的训练好的大模型到底是什么&#xff1f;是像 Word 软件一样可以直接使用的程序吗&#xff1f;” 这个问题看似简单&#xff0c;却一下把我问住了。的确&#xff0c;我们这些身处 AI 领…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

STM32 OTA需要注意问题

一、OTA设计思路&#xff08;问题&#xff09; 1、根据stm32f405 flash分布&#xff0c;最初将flash划分为四个区域&#xff0c;分别是Bootloader、APP1、APP2、参数区&#xff0c;设备上电后&#xff0c;进入Bootloader程序&#xff0c;判断OTA参数&#xff0c;根据参数来确定…

APP逆向之调试的开启

很基础的一个功能设置&#xff0c;大佬轻喷。 背景 在开始进行对APP逆向分析的时候&#xff0c;需要对APP打开调试模式。 打开调试的模式有多种方式可以通过直接改包方式也可以通过借助第三方工具进行打开调试模式。 下面就整理下这个打开调试模式的一些方式。 改包修改模…

Java面试题分享-敏感词替换 java 版本

入职啦最近更新了一些后端笔试、面试题目&#xff0c;大家看看能快速实现吗&#xff1f; 关注 入职啦 微信公众号&#xff0c;每日更新有用的知识&#xff0c;Python&#xff0c;Java&#xff0c;Golang&#xff0c;Rust&#xff0c;javascript 等语言都有 不要再用replaceAll做…