[JAVA小项目]GUI界面的局域网聊天室
思路:
1.服务端:
1.1 创建ServerSocket 监听本地端口
1.2 循环接收多个客户端的连接,并且把多个客户端连接的每个管道都为其创建线程。
服务端类的成员:链表--每个成员都是线程类----也就是装载多个线程的容器
线程类(管道类)成员:(每个线程类包含一根管道所拥有的输入流,输出流,线程名字(也就是客户端用户登陆的名字),线程标识)
1.3 功能:
1.30---- 构造器的初始化线程类的成员---------还要记得把新进来的客户端线程加入线程池
1.31---- 提示客户端"欢迎xxx回来"-----(这个要在线程创建的时候(也就是收到客户端连接的时候)就提示)
1.32---- 接收客户端的数据---并借助转换流转换为String类型,并返回该值
1.33---- 发送数据给本管道另一端的客户端 (发送欢迎xxxx回来) ,(发送数据)
1.34---- 能够群发----sendOther(); 先判断发送的信息有没有包含特殊的字符如@ying: xxxx这样的私聊标识符,如果没有,则群发
群发的实现是---for(MyChannel other:all){ other.send()每个线程自己调用自己的send()方法来发送}
1.35---- 能够私发:根据@:中间的名字判断 -->遍历线程池,判断属于哪个线程的名字 然后发送。other.name.equals(name),把名字,内容也取出来
1.36---- run方法为sendOther(all,getMsgFromClient())方法
2.客户端:
2.0 客户端用户的登陆时的名字------------>控制台输入流----并作为发送线程的名字传给服务端做相应的处理
2.1 调用Socket写好目的IP,和目的端口
2.2 为了实现能够不分先后的接收数据和发送数据给服务端,要创建线程,封装-接收数据类Received 和Send类,都继承了Runnable接口
2.3 主函数为 为两个线程分别创建两个静态代理,start启动
3.GUI界面的实施:
3.1 创建一个窗口类----extends JFrame
1.达到的目的是:
1.首先窗口弹出:提示输入名字--然后点击登陆按钮--------窗口触发事件返回名字给client类用于线程名字的创建(也就是client类要能获取窗口类的成员信息---设置为内部类)
2.buttonListener监听器务必要在Send创建之后才可以初始化设置,并注册
3.所以Send类和Received类的创建必须要在init()里面,且在buttonListener监听器设置的前面,
思路:ButtonListener监听器是不是可以在名字触发之后 再设置和注册
Client类作为窗口类的内部类,让外部类能调用内部类的成员。
文本框要加滚动条 JScroll 包装 JPanel 包装 JTextArea
每个run动用了Thread.sleep()方法, 不知道为啥这样就好一点了
问题:sleep的后遗症
[JAVA小项目]GUI界面的局域网聊天室的更多相关文章
- java小程序---简陋版多人聊天室
功能需求: 1 每运行一次主函数,创建一个客户端聊天界面; 2 客户端界面分三块,公屏(显示所有客户端发送的信息),私屏(用于输入个人想要发送的信息),发送按钮(点击一次,将客户端信息发送到服务端) ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java小项目之:五子棋,你下棋下得过电脑吗?
Java小项目之:五子棋,你下棋下得过电脑吗? Java五子棋功能要求: 1.创建窗口和设计一个棋盘界面 2.实现鼠标点击,棋子出现,黑白棋轮流下 3.能够判断五子相连输赢 4.添加重新开始,悔棋,退 ...
- java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码
Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...
- python实现串口通讯小程序(GUI界面)
python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...
- C# 异步通信 网络聊天程序开发 局域网聊天室开发
Prepare 本文将使用一个NuGet公开的组件技术来实现一个局域网聊天程序,利用组件提供的高性能异步网络机制实现,免去了手动编写底层的困扰,易于二次开发,扩展自己的功能. 在Visual Stud ...
- Python实现网络图形化界面多人聊天室 - Linux
网络图形化界面多人聊天室 - Linux Windows版本:https://www.cnblogs.com/noonjuan/p/12078524.html 在Python实现网络多人聊天室基础上, ...
随机推荐
- 获取表单提交的数据getParameter()方法
请求对象:request public String getParameter(String name); 通过request的getParameter(String name)方法获取 表单里面的n ...
- Python中实现简单的插件框架
在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...
- 洛谷 P2677 超级书架 2 题解
传送门 题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= ...
- windows下Idea结合maven开发spark和本地调试
本人的开发环境: 1.虚拟机centos 6.5 2.jdk 1.8 3.spark2.2.0 4.scala 2.11.8 5.maven 3.5.2 在开发和搭环境时必须注意版本兼容的问题 ...
- 包括ES6在内的数组操作(待更)
下面是我对ES6和古老的JS(ES3)一些数组操作的总结,附带了一些我曾经用上的. map处有待更内容. 贴一下有借鉴的网站:https://segmentfault.com/a/1190000002 ...
- 创建逻辑卷LVM以及swap分区
#!/bin/bash ##创建逻辑卷LVM /dev/mapper/lvm_data-data### ###default 大小为500G,但是LV一般会比500略小################ ...
- composer 创建自己包
服务器环境下创建自己的项目文件 初始化composer 打开cmd 窗口,cd 到 backrestore 执行 composer init 命令 D:\phpStudy\WWW\backrestor ...
- C++_代码重用4-多重继承
继承使用时要注意,默认是私有派生.所以要公有派生时必须记得加关键字Public. MI(Multi Inheritance)会带来哪些问题?以及如何解决它们? 两个主要问题: 从两个不同的基类继承同名 ...
- 【算法笔记】B1035 插入与归并
1035 插入与归并 (25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直 ...
- BZOJ - 1003 DP+最短路
这道题被马老板毒瘤了一下,TLE到怀疑人生 //然而BZOJ上妥妥地过了(5500ms+ -> 400ms+) 要么SPFA太玄学要么是初始化block被卡到O(n^4) 不管了,不改了 另外D ...