java聊天室论文及代码Word格式.docx
- 文档编号:15747293
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:24
- 大小:111.34KB
java聊天室论文及代码Word格式.docx
《java聊天室论文及代码Word格式.docx》由会员分享,可在线阅读,更多相关《java聊天室论文及代码Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
本程序的要求为:
设计聊天室,聊天室允许多人进入,并设置广播、私语等多种聊天方式
功能设计:
本程序要构建的聊天室属性的设计参照了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){
+e);
System.exit
(1);
connections=newVector(1000);
connect=newThread(this);
connect.start();
//服务器端程序启动
}
//服务器main()初始化
publicstaticvoidmain(Stringargs[]){
newChatServer();
System.out.println("
ChatServerisstarting!
......"
);
//服务器线程connect操作run方法
publicvoidrun(){
while(true){//始终监听来自网络端口的信息
Socketclient=listen.accept();
//为每一个人分别启动一个客户端线程
FirstThreadft=newFirstThread(this,client);
ft.setPriority(Thread.MIN_PRIORITY);
ft.start();
//客户端线程启动
connections.addElement(ft);
//将客户端线程加入向量列表中
}
}catch(IOExceptione){
//向聊天室所有人员发送普通话语信息
publicvoidbroadcast(Stringyaoshuode){
inti;
FirstThreadyou;
for(i=0;
i<
connections.size();
i++){
you=(FirstThread)connections.elementAt(i);
try{
you.out.writeUTF(yaoshuode);
}catch(IOExceptione){}
}
//处理悄悄话,向特定人员发送悄悄话
publicvoidbroadcast1(Stringyaoshuode){
Strings1,s2,s3;
s1=newString("
PEOPLE"
s2=newString(yaoshuode.substring(4));
//悄悄地对为4个字符
s3=s1.concat(s2);
if(s3.startsWith(you.name)){//name格式为:
PEOPLE+名字+[性别]
try{
you.out.writeUTF(yaoshuode);
}catch(IOExceptione){}
}
}
//客户端线程类FirstThread
classFirstThreadextendsThread{
protectedSocketclient;
//line读取来自客户端的消息;
name格式为:
Stringline,name;
protectedDataOutputStreamfirstout,out;
//定义网络数据输出流
protectedChatServerserver;
protectedDataInputStreamin;
//FirstThread初始化线程
publicFirstThread(ChatServerserver,Socketclient){
this.server=server;
this.client=client;
in=newDataInputStream(client.getInputStream());
out=newDataOutputStream(client.getOutputStream());
firstout=newDataOutputStream(client.getOutputStream());
server.connections.removeElement(this);
client.close();
}catch(IOExceptione2){
System.err.println("
有问题哦"
return;
if(this.client==null){
server.broadcast("
QUIT"
+this.name);
this.name=null;
publicvoidrun(){
try{//客户端线程初始化运行读取服务端的已有聊天室人员列表信息
inti;
for(i=0;
server.connections.size();
FirstThreadc=(FirstThread)(server.connections.elementAt(i));
if(c.name!
=null){
try{
firstout.writeUTF(c.name+"
*"
}catch(IOExceptione){}
}
}catch(ArrayIndexOutOfBoundsExceptione){}
catch(NullPointerExceptione){}
//客户端线程始终在监听的操作方法
while(true){
line=in.readUTF();
//line读取来自客户端线路的信息
//线路信息前端为PEOPLE表明有人进入了聊天室
if(line.startsWith("
)){
//获取当前对象的线程
FirstThreadd=(FirstThread)(server.connections.elementAt(server.connections.indexOf(this)));
if(d.name==null){
d.name=line;
}
//有人在一个窗口中换用另一个人的名字登陆
elseif(d.name!
=null){//写入QUIT+PEOPLE+名字+[性别]信息
server.broadcast("
//使原来的人离开聊天室
}catch(ArrayIndexOutOfBoundsExceptione){}
catch(NullPointerExceptione){}
finally{
server.broadcast(line);
}//向聊天室所有人员发送有人进入聊天室信息
//线路信息前端QUIT表明有人离开了聊天室
elseif(line.startsWith("
server.broadcast("
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 聊天室 论文 代码