用JavaSocket编程开发聊天室

实验介绍

  1. 用Java图形用户界面编写聊天室服务器端和客户端,支持多个客户端连接到一个服务器。每个客户端能够输入账号。
  2. 可以实现群聊(聊天记录显示在所有客户端界面)。
  3. 完成好友列表在各个客户端上显示。
  4. 可以实现 私人聊天,用户可以选择某个其他用户,单独发送信息。
  5. 服务器能够群发系统消息,能够强行让某些用户下线。
  6. 客户端的上线下线要求能够在其他客户端上面实时刷新。

私聊,客户端、服务端的群发消息和上线提醒

客户端的下线提醒

登陆界面

项目结构

服务器端

服务器端需要用到多线程,当一个客户端请求连接时,服务器便为其分配一个线程来处理他的需求。并且服务器端创建一个线程集合,方便管理所有连入的线程。
下面展示部分代码。

 public void run() {try {while (true) {s = ss.accept();//s 就是当前的连接对应的 Socket,对应一个客户端//该客户端随时可能发信息过来,必须要接收//另外开辟一个线程,专门为这个 s 服务,负责接受信息ChatThread ct = new ChatThread(s);clients.add(ct);ct.start();}} catch (Exception ex) {}}

同时根据客户端传来的标志数flag来进行相应的操作,如发送消息,退出等。
下面展示部分代码。

public void run() {try {int flag;while (true) {flag = br.read();flag-=48;if(flag==1) {//登录String name1 = br.readLine();String pwd1 = br.readLine();int flag1=login(name1,pwd1);ps.print(flag1);     if(flag1==1) {this.username=name1;ps.print(vv.size());if(vv.size()>0) {for(int i=0;i<vv.size();i++) {ps.println(vv.get(i));}}vv.add(name1);jComboBox.addItem(name1);sendUsers(name1);taMsg.append(name1 + "进入了聊天室" + "\n");}}else if(flag==2) {//注册String name1 = br.readLine();String pwd1 = br.readLine();int flag2 = Register(name1, pwd1);ps.print(flag2);}else if(flag==3) {//发消息String str = br.readLine();// 读取该 Socket 传来的信息sendMessage(str); // 将 str 转发给所有客户端taMsg.append(str+"\n");}else if(flag==4) {//退出String user = br.readLine();taMsg.append(user+"退出了聊天室"+"\n");sendMessage(user+"退出了聊天室");for(int i=0;i<vv.size();i++) {if(vv.get(i).equals(user)) {vv.remove(i);}}exit(user);}else if(flag==5) {//私聊String user1 = br.readLine();String user2 = br.readLine();String msg = br.readLine();sendMessageToUser(msg,user1,user2);}}} catch (Exception ex) {}}}

客户端

客户端分为登录,注册,和聊天主界面
客户端首先打开登录&注册界面,当登陆成功后,打开聊天主界面,且要将登录界面连接的socket和用户名传入聊天界面,还需要在服务器端得到一个jComboBox(下拉列表框),传给主界面显示。
下面展示部分代码。

if(登录成功){new Chat(socket,name,jComboBox).init();login.dispose();
}

主界面很简单,功能的实现也不复杂,要注意的就是在传给服务器数据时要提前传入一个标志数flag(我用的是一个整数)。
下面展示部分代码。

private volatile boolean exit = false;
public void run() {try {while (!exit) {- - - - - - - -- - - - - - - -if(关闭){exit = br.ready();}}this.dispose();} catch (Exception ex) {}

这里的处理,因为服务器可以随时关闭客户端,所以需要有一个exit来控制线程的关闭。服务器端会在关闭客户端时,给exit传入一个true。

结束

实验总结:学习了Java多线程,JavaSocket编程,Java图形界面,实现了实验要求的功能。
实验不足:界面简单。设计的不够美观。

学习笔记04(java多人聊天室)相关推荐

  1. Java 多人聊天室(带界面)

    Java 多人聊天室 先说,记录本人的学习过程,当笔记了 多人聊天室分为 1.服务器 ①.while循环 (guanbo) 每连接一个用户就记录一个用户的属性. ②.定义一个存储用户的类( MySoc ...

  2. Java 多人聊天室

    Java实训做的多人聊天室,效果如图: 功能: 能够实现多个客户端之间的互相聊天,服务端来负责接收数据和转发数据. 每个客户端可以自己设置和修改自己的名称,并传给服务器让其他客户端知道. 当有客户端加 ...

  3. java 多人聊天室_Java高效NIO之多人聊天室

    系统功能 使用NIO实现一个多人聊天室.聊天室包含以下功能. 服务端 处理客户连接 新连接客户端注册名字,并进行重名判断 新用户注册后向客户端广播用户列表 接收客户端消息并单播或广播 客户端 向服务端 ...

  4. java多人聊天室的实验任务_Java基于中介者模式实现多人聊天室功能示例

    本文实例讲述了Java基于中介者模式实现多人聊天室功能.分享给大家供大家参考,具体如下: 一 模式定义 中介者模式,用一个中介对象来封装一系列对象之间的交互,使各个对象中不需要显示地引用其他对象实例, ...

  5. java多人聊天室与网络画板

    本篇主要是对本人前一篇通信博客在部分功能和代码结构上的优化,以下为前篇博客的地址: java通信-网络聊天室&网络画板(简陋版) 一.代码结构上的优化: 对前篇博客服务器类中最后流的关闭上代码 ...

  6. Socket网络编程学习笔记 (10)简易聊天室案例

    1. 聊天室数据传输设计 必要条件:客户端.服务器 必要约束:数据传输协议 原理:服务器监听消息来源.客户端链接服务器并发送消息到服务器 1.1 客户端.服务器数据交互 client 发送消息到服务器 ...

  7. java多人聊天室实现(可群聊私聊/添加好友/发送文件)

    一.功能介绍 本程序基于websocket实现,程序主要借鉴参考 https://www.cnblogs.com/csu-lmw/p/10981374.html,并在原程序的基本框架下扩充了添加好友以 ...

  8. 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)

    菜鸟学习笔记:Java提升篇10(网络2--UDP编程.TCPSocket通信) UDP编程 TCP编程(Socket通信) 单个客户端的连接 多个客户端的连接(聊天室案例) UDP编程 在上一篇中讲 ...

  9. java 多人聊天_java编程实现多人聊天室功能

    导读热词 本文实例为大家分享了java实现多人聊天室的具体代码,供大家参考,具体内容如下 程序源代码及运行截图: server.java //server.java package Socket; i ...

最新文章

  1. 存储----DAS、SAN、NAS
  2. wmic windows
  3. c语言设计程序框图,C语言课程设计————写下流程图! 谢谢
  4. 淘宝灵活的圆角框--通过一个圆形图片形成圆角原理
  5. Qt程序移植到其他电脑上无法运行的解决方法
  6. Cockroachdb 一、系统环境
  7. Linux中用户管理详解(上)-Linux学习日记
  8. centos 6.8 配置csh的shell和环境变量
  9. Visual Studio Code鼠标右键Open in Browser消失问题
  10. sqlmap的安装教程
  11. 算法竞赛入门经典(第二版)习题代码语言篇(一)
  12. ug打开服务器文件保存不了,UG编程时突然提示保存不了,你该怎么办,看这里...
  13. QT5+VC2012配置以及常见错误
  14. 电脑知识与技术杂志电脑知识与技术杂志社电脑知识与技术编辑部2022年第15期目录
  15. 网易测试工程师笔经面经(已上岸)
  16. Android 广告图片 全屏图片适配方案的思路
  17. python terminal 库_zhihu-terminal 终端版知乎客户端
  18. maya建模与骨骼动画快速实现人工鱼
  19. 智能手机全球普及率今年有望达到63%
  20. 【2017百度之星程序设计大赛 - 初赛(B)】度度熊的交易计划

热门文章

  1. 136:vue+openlayers 绘制正三角形,正方形,正五边形...
  2. 2021年央视春晚有哪些你喜欢的节目?
  3. oracle之sql面试题,oracle sql面试题
  4. 电脑如何录屏?3个方法教您win10电脑怎么录屏!
  5. .NetCore框架Surging系列(二)HTTP
  6. 西安科技大学学分计算机制,干货 | 关于绩点和学分的二三事
  7. python模型训练框架_使用TensorFlow框架基于SSD算法训练模型
  8. `Solution` `LC` 2603. 收集树中金币
  9. G2O 图优化基础与示例汇总
  10. [CVPR2018]Nonlinear 3D Face Morphable Model