java聊天室 博客_java网络聊天室
功能简述:
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网络聊天室相关推荐
- java 对象池 博客_Java对象池技术的原理及其实现的小结
一起学习 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 T2 T3.其中T1表示对象的创建时间,T2表示对象的 ...
- java并发编程 博客_JAVA并发编程常识
1 JVM内存模型 堆: 所有对象全部放在共享堆空间中 对象的属性在共享堆空间内 内存单字节对齐,short不变 栈: 每个线程都有独立的线程栈空间 线程栈只存基本类型和对象地址 栈内存4字节对齐,s ...
- java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字_灵思致远Leansmall的博客-CSDN博客_java判断字符串只包含数字字母
import java.util.regex.Matcher; import java.util.regex.Pattern;public class StrValidate {// 纯数字priva ...
- JAVA进阶案例 TCP编程之网络聊天工具(服务端)
实现分析. 1.开启服务端 客户端选择'登录以后'后,提示输入用户名和密码,验证成功则进入好友列表界面 2.用户聊天 双击好友,进入好友聊天界面.在信息框编辑信息 点击发送 当客户端向服务端发送数据时 ...
- java课程设计 博客园_Java课程设计博客(团队)
Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 4. 项目git提交记录截图 5. 项目功能架 ...
- java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...
- 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档)
计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...
- Mblog 开源Java多人博客系统
Mblog 开源Java多人博客系统 技术选型: JDK8 MySQL Spring-boot Spring-data-jpa Shiro Hibernate-search Ehcache Freem ...
- 毕业设计分享----基于Java的个性化博客空间的设计与实现
一.大宇想说的话 大宇大学毕业已经四个月了,这四个月有懒惰的时候,有努力的时候.回首自己走过的路,只有毕业设计最能浓缩我的所学.我早就有这个打算:把自己的毕业设计与大家分享,但一直没有用行动落实.这个 ...
最新文章
- 华为昇腾师资培训沙龙·南京场 |华为昇腾 ACL 语言开发实践全程干货来了!看完就实操系列...
- Jvm 系列(十):Java 即时编译器JIT机制以及编译优化
- 第十六届智能车竞赛安徽赛区成绩与奖项公示
- dblinq mysql_DBLinq mysql辅助脚本
- vue-router 路由嵌套显示不出来_45. Vue路由vuerouter的基本使用
- linux程序设计——多线程(第十二章)
- OpenSER安装配置指南
- 趣谈网络协议(二)传输层
- android 蓝牙开锁功能,蓝牙智能锁工作原理及功能介绍
- 计算机操作系统试题题库及答案(完整版)
- 【WebGIS实例】(1)MapboxGL绘制端点有符号的线
- 花花嬉游团的千岛湖懒人游~~
- If today were the last day of my life
- 财务报表版本在开发报表中的应用
- 软件测试管理--第二章 2.2节
- totolinkn200up怎么设置_TOTOLINK N200UP无线网卡驱动
- usb disconnect
- 计算机财务管理系统的目标,计算机财务管理之计算机财务管理系统的建立课件.ppt...
- 一些常见数列的生成函数推导
- jQuery中实现,datatable后台数据获取与前端分页展示