java聊天室论文及代码.docx
- 文档编号:2836228
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:24
- 大小:111.34KB
java聊天室论文及代码.docx
《java聊天室论文及代码.docx》由会员分享,可在线阅读,更多相关《java聊天室论文及代码.docx(24页珍藏版)》请在冰豆网上搜索。
java聊天室论文及代码
JAVA网络编程实践
一.项目简述和目的
聊天室允许多人进入,并设置广播、私语等多种聊天方式。
本论文主要介绍了对网络聊天程序的设计的分析、设计的全部过程。
a培养实际工作所需要的动手能力,进一步熟悉基本概念;
b熟练掌握对实际问题的抽象技能,了解程序基本的流程;
c培养查阅资料,独立思考问题的能力。
二解题基本思路;
聊天室要实现的基本功能就是可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,多个人同时在线,一人发信息后,其他在线人员都能看到消息。
还有就是实现私聊的功能就是一个人和另一个人聊天其余的在线用户看不见聊天的内容,同是动态的现实右边框里面的在线人员的在线和下线以及退出。
这里要解决两个主要问题:
一个是如何更新在线人员,一个如何更新消息。
这里考虑用两个全局变量,一个存储在线人员信息,一个存储消息。
客户端
Java聊天室客户/服务器通信图
三.分析和设计
需求分析:
本程序的要求为:
设计聊天室,聊天室允许多人进入,并设置广播、私语等多种聊天方式
功能设计:
本程序要构建的聊天室属性的设计参照了qq聊天功能操作界面的基本功能,其功能有以下几个方面:
1)聊天室允许多人进入,并且有每一个聊天室正常运行。
2)可并设置广播、私语等多种聊天方式。
开发环境:
eclipse
程序框图
客户端
启动程序
Applet初始化方法init()构造界面,建立与服务器的连接
点击【刷新聊天者列表】
点击【刷新聊天者列表】按钮
双击“聊天者列表”中的昵称
发送普通话语信息
点击【退出聊天室】按钮
点击【进入聊天室】按钮
弹出“发送悄悄话窗口,输入悄悄话”
服务器线程启动,监听来自客户端的信息流
服务器端
四.主要程序源代码;
服务器端程序:
import.*;
importjava.io.*;
importjava.util.*;
/*聊天服务器端处理主类ChatServer*/
publicclassChatServerimplementsRunnable{
publicstaticfinalintPORT=1234;
protectedServerSocketlisten;//定义服务器端套接字listen
staticVectorconnections;//向量类connections存放与服务器连接的客户线程列表
Threadconnect;//定义服务器端线程
//服务器构造初始化线程
publicChatServer(){
try{
listen=newServerSocket(PORT);//使用本地IP地址创建一个服务器
}catch(UnknownHostExceptione2){
System.err.println("error:
"+e2);
}
catch(IOExceptione){
System.err.println("error:
"+e);
System.exit
(1);
}
connections=newVector(1000);
connect=newThread(this);
connect.start();//服务器端程序启动
}
//服务器main()初始化
publicstaticvoidmain(Stringargs[]){
newChatServer();
System.out.println("ChatServerisstarting!
......");
//服务器线程connect操作run方法
}
publicvoidrun(){
try{
while(true){//始终监听来自网络端口的信息
Socketclient=listen.accept();
//为每一个人分别启动一个客户端线程
FirstThreadft=newFirstThread(this,client);
ft.setPriority(Thread.MIN_PRIORITY);
ft.start();//客户端线程启动
connections.addElement(ft);//将客户端线程加入向量列表中
}
}catch(IOExceptione){
System.err.println("error:
"+e);
System.exit
(1);
}
}
//向聊天室所有人员发送普通话语信息
publicvoidbroadcast(Stringyaoshuode){
inti;
FirstThreadyou;
for(i=0;i you=(FirstThread)connections.elementAt(i); try{ you.out.writeUTF(yaoshuode); }catch(IOExceptione){} } } //处理悄悄话,向特定人员发送悄悄话 publicvoidbroadcast1(Stringyaoshuode){ inti; Strings1,s2,s3; FirstThreadyou; s1=newString("PEOPLE"); s2=newString(yaoshuode.substring(4));//悄悄地对为4个字符 s3=s1.concat(s2); for(i=0;i you=(FirstThread)connections.elementAt(i); if(s3.startsWith(you.name)){//name格式为: PEOPLE+名字+[性别] try{ you.out.writeUTF(yaoshuode); }catch(IOExceptione){} } } } } //客户端线程类FirstThread classFirstThreadextendsThread{ protectedSocketclient; //line读取来自客户端的消息;name格式为: PEOPLE+名字+[性别] Stringline,name; protectedDataOutputStreamfirstout,out;//定义网络数据输出流 protectedChatServerserver; protectedDataInputStreamin;//定义网络数据输出流 //FirstThread初始化线程 publicFirstThread(ChatServerserver,Socketclient){ this.server=server; this.client=client; try{ in=newDataInputStream(client.getInputStream()); out=newDataOutputStream(client.getOutputStream()); firstout=newDataOutputStream(client.getOutputStream()); }catch(IOExceptione){ try{ server.connections.removeElement(this); client.close(); }catch(IOExceptione2){ System.err.println("有问题哦"+e); return; } } if(this.client==null){ server.broadcast("QUIT"+this.name); this.name=null; } } publicvoidrun(){ try{//客户端线程初始化运行读取服务端的已有聊天室人员列表信息 inti; for(i=0;i FirstThreadc=(FirstThread)(server.connections.elementAt(i)); if(c.name! =null){ try{ firstout.writeUTF(c.name+"*"); }catch(IOExceptione){} } } }catch(ArrayIndexOutOfBoundsExceptione){} catch(NullPointerExceptione){} //客户端线程始终在监听的操作方法 try{ while(true){ line=in.readUTF();//line读取来自客户端线路的信息 //线路信息前端为PEOPLE表明有人进入了聊天室 if(line.startsWith("PEOPLE")){ try{ //获取当前对象的线程 FirstThreadd=(FirstThread)(server.connections.elementAt(server.connections.indexOf(this))); if(d.name==null){ d.name=line; } //有人在一个窗口中换用另一个人的名字登陆 elseif(d.name! =null){//写入QUIT+PEOPLE+名字+[性别]信息 server.broadcast("QUIT"+this.name); d.name=line;//使原来的人离开聊天室 } }catch(ArrayIndexOutOfBoundsExceptione){} catch(NullPointerExceptione){} finally{ server.broadcast(line); }//向聊天室所有人员发送有人进入聊天室信息 } //线路信息前端QUIT表明有人离开了聊天室 elseif(line.startsWith("QUIT")){ server.broadcast("QUIT"+this.name); server.connections.removeElement(this); this.in.close(); this.out.close(); this.firstout.close();//关闭输入输出流 this.client.close(); this.yiel
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 聊天室 论文 代码