功能简述:

1.可以多用户登陆聊天室,用户可以选择私聊或者对所有人聊天。(这里时间关系仅实现群聊,私聊只要将私聊消息和群聊消息封装开来即可实现)

2.有人登陆聊天室时由系统通知所有在线用户,并刷新在线用户列表。

3.有人退出聊天室时由系统通知所有在线用户,并刷新在线用户列表。

登陆框:

聊天窗口

服务器控制台信息

服务器代码:

package exercise.chatroom;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.EOFException;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.SocketException;

import java.util.ArrayList;

import java.util.List;

import javax.swing.JButton;

public class ChatServer {

List

clients = new

ArrayList();

Client c = null;

ArrayList

userList = new

ArrayList();

public static void main(String[] args){

new

ChatServer().start();

}

public void start(){

boolean started = false;

ServerSocket ss = null;

DataInputStream dis =

null;

try{

ss = new

ServerSocket(8888);

started =

true;

System.out.println("服务器上线了!");

}catch(Exception e) {

e.printStackTrace();

}

try{

while(started){

Socket s = ss.accept();

c = new Client(s);//启动线程,实行run()方法

System.out.println("有一客户端登陆了!");

new

Thread(c).start();//启动start方法,循环.start是Thread中的方法与这上面的start无关

clients.add(c);

//dis.close();

}

}catch(Exception e) {

//e.printStackTrace();

}

finally{

try {

ss.close();

} catch

(IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

}

class Client implements Runnable {

private Socket s;

private DataInputStream dis

=null;

private DataOutputStream

dos=null;

private boolean bConnected

=false;

public Client(Socket s){

this.s=s;

try {

dis= new DataInputStream(s.getInputStream());

dos =new DataOutputStream(s.getOutputStream());

bConnected =true;

}catch

(IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

public void send(String

str)throws Exception{

dos.writeUTF(str);

}

public void run(){

try{

while(bConnected){

String

str = dis.readUTF();

if(str.charAt(0)

== 'L'){

userList.add("X"+str.substring(1));

String

str1 = "R" + "[系统消息]:" + str.substring(1) + "上线了!";

System.out.println(str1.substring(1));

for(int

i=0;i

c

= clients.get(i);

c.send(str1);

}

System.out.print("目前在线用户[

");

for(int

j=0;j

String

s = userList.get(j);

System.out.print(s.substring(1)+"

");

for(int

i=0;i

c

= clients.get(i);

c.send(s);

}

}

System.out.println("]");

}

else

if(str.charAt(0) == 'S'){

userList.remove("X"+str.substring(1));

String

str1 = "R" + "[系统消息]:" + str.substring(1) + "下线了!";

System.out.println(str1.substring(1));

for(int

i=0;i

c

= clients.get(i);

c.send(str1);

}

System.out.print("目前在线用户[

");

for(int

j=0;j

String

s = userList.get(j);

System.out.print(s.substring(1)+"

");

for(int

i=0;i

c

= clients.get(i);

c.send(s);

}

java聊天室 博客_java网络聊天室相关推荐

  1. java 对象池 博客_Java对象池技术的原理及其实现的小结

    一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...

  2. java并发编程 博客_JAVA并发编程常识

    1 JVM内存模型 堆: 所有对象全部放在共享堆空间中 对象的属性在共享堆空间内 内存单字节对齐,short不变 栈: 每个线程都有独立的线程栈空间 线程栈只存基本类型和对象地址 栈内存4字节对齐,s ...

  3. java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字_灵思致远Leansmall的博客-CSDN博客_java判断字符串只包含数字字母

    import java.util.regex.Matcher; import java.util.regex.Pattern;public class StrValidate {// 纯数字priva ...

  4. JAVA进阶案例 TCP编程之网络聊天工具(服务端)

    实现分析. 1.开启服务端 客户端选择'登录以后'后,提示输入用户名和密码,验证成功则进入好友列表界面 2.用户聊天 双击好友,进入好友聊天界面.在信息框编辑信息 点击发送 当客户端向服务端发送数据时 ...

  5. java课程设计 博客园_Java课程设计博客(团队)

    Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 4. 项目git提交记录截图 5. 项目功能架 ...

  6. java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...

  7. 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档)

    计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...

  8. Mblog 开源Java多人博客系统

    Mblog 开源Java多人博客系统 技术选型: JDK8 MySQL Spring-boot Spring-data-jpa Shiro Hibernate-search Ehcache Freem ...

  9. 毕业设计分享----基于Java的个性化博客空间的设计与实现

    一.大宇想说的话 大宇大学毕业已经四个月了,这四个月有懒惰的时候,有努力的时候.回首自己走过的路,只有毕业设计最能浓缩我的所学.我早就有这个打算:把自己的毕业设计与大家分享,但一直没有用行动落实.这个 ...

最新文章

  1. 华为昇腾师资培训沙龙·南京场 |华为昇腾 ACL 语言开发实践全程干货来了!看完就实操系列...
  2. Jvm 系列(十):Java 即时编译器JIT机制以及编译优化
  3. 第十六届智能车竞赛安徽赛区成绩与奖项公示
  4. dblinq mysql_DBLinq mysql辅助脚本
  5. vue-router 路由嵌套显示不出来_45. Vue路由vuerouter的基本使用
  6. linux程序设计——多线程(第十二章)
  7. OpenSER安装配置指南
  8. 趣谈网络协议(二)传输层
  9. android 蓝牙开锁功能,蓝牙智能锁工作原理及功能介绍
  10. 计算机操作系统试题题库及答案(完整版)
  11. 【WebGIS实例】(1)MapboxGL绘制端点有符号的线
  12. 花花嬉游团的千岛湖懒人游~~
  13. If today were the last day of my life
  14. 财务报表版本在开发报表中的应用
  15. 软件测试管理--第二章 2.2节
  16. totolinkn200up怎么设置_TOTOLINK N200UP无线网卡驱动
  17. usb disconnect
  18. 计算机财务管理系统的目标,计算机财务管理之计算机财务管理系统的建立课件.ppt...
  19. 一些常见数列的生成函数推导
  20. jQuery中实现,datatable后台数据获取与前端分页展示

热门文章

  1. Java虚拟机监控指标及监控配置
  2. 字符设备之register_chrdev与register_chrdev_region
  3. CSDN博客越来越垃圾了,到处放广告
  4. 让思维导图改变我们的工作和生活吧
  5. BCH压力测试即将开始,你确定不来凑凑热闹?
  6. PHP环境配置文件php.ini详解注释 --转贴
  7. iOS数据库操作之FMDB
  8. 统计每天某一时间段的SQL语句
  9. c#冒泡、快速、选择和插入排序算法的项目应用
  10. 比CRUD多一点儿(三):UPDATE、DELETE语句