Java聊天室搭建
来源:互联网 发布:淘宝双十一营销案例 编辑:程序博客网 时间:2024/06/06 17:32
- 做这个项目前需要先做好分析:
- 聊天室分为两个模块,服务器和客户端。
- 服务器主要实现逻辑是:客户端第一次进入聊天室打印欢迎日志、接收客户端的消息打印在聊天室中、群发给其他用户、判断私聊的条件。
- 客户端主要实现逻辑是:初始化信息、发送消息给服务器、接收来自服务器的消息。
- 项目从简单版本往上写,逐步增加功能:
第一个版本:通过TCP搭建服务器和客户端,一个客户端上线服务器就打印一条上线提示。
第二个版本:客户端发送一条消息,服务器接收一条,并反馈一条已接收的信息给客户端。
第三个版本:通过多线程使客户端能不断给服务器发送消息,服务器也能不断回复客户端的信息。
第四个版本:多个客户端开启时,自身发送的消息由服务器发给其他所有客户端,在聊天室中打印出以客户端姓名为前缀的每个人发出的消息。
第五个版本:判断哪些是私聊的信息,私聊信息既不打印在聊天室中也只会发送给当前用户的私聊对象。完善代码。
- 服务器代码:来一个客户端就开启一个服务器线程。具体逻辑放在线程中完成。
publicclassServer {
publicstaticvoidmain(String[]args)throwsIOException {
List<ServerThread>list=newArrayList<ServerThread>();
//判断私聊时需要知道发送给哪个客户端,所以把为每一个客户端服务的线程放入一个集合中。以此来遍历所以客户端。
ServerSocketserverSocket=newServerSocket(8080);
while(true){
Socketsocket=serverSocket.accept();
ServerThread serverThread=newServerThread(socket,list);
//开启线程时把当前客户端对应套接字和装有所有serverThread对象的集合传递给为当前客户端服务的线程。
list.add(serverThread);
//开启一个就往list中添加一个。
serverThread.start();
}
}
}
- 客户端代码:读入键盘输入数据,发送给服务器,并接收来自服务器的消息。读和写分别使用不同的线程。
publicclassClient {
publicstaticvoidmain(String[]args)throwsUnknownHostException, IOException {
Socketsocket=newSocket("10.2.155.91", 8080);
//通过服务器ip地址和服务器端口号建立与服务器的连接。
WriterThreadwriterThread=newWriterThread(socket);
//开启一个写线程发送数据到服务器。
writerThread.start();
ReaderThreadreaderThread=newReaderThread(socket);
//开启一个读线程接收来自服务器的消息。
readerThread.start();
}
}
- 服务器线程代码:
publicclassServerThreadextendsThread{
privateSocketsocket;
privateBufferedReaderbReader;
privateBufferedWriterbWriter;
privateList<ServerThread>list;
privateStringname;
publicServerThread(Socketsocket,List<ServerThread>list) {
try{
this.socket=socket;
this.list=list;
bReader=newBufferedReader(newInputStreamReader(socket.getInputStream()));
bWriter=newBufferedWriter(newOutputStreamWriter(socket.getOutputStream()));
}catch(IOExceptione) {
e.printStackTrace();
}
}
publicvoidrun() {
WelcomeChat();
try{
while(true){
Stringinfo=bReader.readLine();
if(info.startsWith("@")&&info.indexOf("#") !=-1&&
info.indexOf("#")-info.indexOf("@")>1) {
SendByName(info);
}
else{
System.out.println(name+"说:"+info);
SendToOthers(info);
}
}
}catch(IOExceptione) {
e.printStackTrace();
}
}
privatevoidWelcomeChat() {
try{
name=bReader.readLine();
System.out.println("欢迎"+name+"进入聊天室");
}catch(IOExceptione1) {
//TODOAuto-generated catch block
e1.printStackTrace();
}
}
privatevoidSendByName(Stringinfo)throwsIOException {
Stringname2=info.substring(info.indexOf("@") + 1,info.indexOf("#"));
info=info.substring(info.indexOf("#")+1);
for(ServerThreadserverThread:list) {
if(name2.equals(serverThread.name)) {
bWriter=newBufferedWriter(newOutputStreamWriter(serverThread.socket.getOutputStream()));
bWriter.write(name+"悄悄对你说:"+info);
bWriter.newLine();
bWriter.flush();
break;
}
}
}
privatevoidSendToOthers(Stringinfo)throwsIOException {
for(ServerThreadserverThread:list) {
if(Thread.currentThread()!=serverThread) {
bWriter=newBufferedWriter(newOutputStreamWriter(serverThread.socket.getOutputStream()));
bWriter.write(name+"说:"+info);
bWriter.newLine();
bWriter.flush();
}
}
}
}
1 0
- Java聊天室搭建
- java聊天室
- java 聊天室
- Java聊天室
- java 聊天室
- java 聊天室
- java聊天室
- Java聊天室
- Java 聊天室
- unity 搭建聊天室
- c# MongoDB 聊天室搭建
- 搭建简易在线聊天室
- NodeJs小试牛刀--聊天室搭建
- 聊天室 搭建服务器
- swoole搭建简易聊天室
- 用PHP+MySQL搭建聊天室
- node socket搭建简单聊天室
- 基于swoole搭建聊天室程序
- 只是一个文件节点类为了项目的数据处理
- HashMap与LinkedHashMap重要知识点
- FOJ Problem 1099 Square
- unity读取记事本文字
- c函数itoa和atoi实现
- Java聊天室搭建
- python--文件删除、判断目录存在、字符串替换
- Building Apps with Location & Maps
- 如何查看Linux版本信息
- poj 2482 Stars in Your Window 线段树+离散化
- Laravel 使用遇到的问题及解决方法
- poi 用户自定义函数
- linux中cat more less 命令区别
- 怎么合理管理、提高Javascript