java实现聊天系统计算机网络课程设计报告资料.docx

上传人:b****4 文档编号:1158384 上传时间:2022-10-18 格式:DOCX 页数:28 大小:104.59KB
下载 相关 举报
java实现聊天系统计算机网络课程设计报告资料.docx_第1页
第1页 / 共28页
java实现聊天系统计算机网络课程设计报告资料.docx_第2页
第2页 / 共28页
java实现聊天系统计算机网络课程设计报告资料.docx_第3页
第3页 / 共28页
java实现聊天系统计算机网络课程设计报告资料.docx_第4页
第4页 / 共28页
java实现聊天系统计算机网络课程设计报告资料.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

java实现聊天系统计算机网络课程设计报告资料.docx

《java实现聊天系统计算机网络课程设计报告资料.docx》由会员分享,可在线阅读,更多相关《java实现聊天系统计算机网络课程设计报告资料.docx(28页珍藏版)》请在冰豆网上搜索。

java实现聊天系统计算机网络课程设计报告资料.docx

java实现聊天系统计算机网络课程设计报告资料

 

计算机网络课程设计报告

 

学生姓名

学号

班级

指导教师

设计时间

目录

第一章系统描述

1.1设计目的·························3

1.2系统设计任务·····················3

1.3系统设计分析······················3

1.4系统功能分析······················4

第二章功能模块结构

2.1模块划分·························5

2.2模块结构图·······················5

2.1模块功能·························5

第三章模块算法实现

3.1服务器实现·······················6

3.2客户端实现·······················9

第四章运行结果

·······················13

第五章课程设计总结

·······················17

第六章附录

6.1参考文献························19

6.2源代码··························19

 

第一章系统描述

1.1设计目的

1.学习网络编程的知识,掌握网络编程的方法。

2.进一步掌握编程思想与编程技巧,做到模块化程序设计,

3.强化语言学习,尤其是Java的图形界面与多线程,需反复练习,熟练掌握。

1.2系统设计任务

聊天室软件的设计与开发:

基本要求可以完成群聊、私人聊天,实时发送和显示聊天信息,完成好友列表;进一步要求带表情,附件发送,聊天信息的加密传送,设置黑名单等。

学习通信编程Socket接口编程,使用TCP或UDP接口完成信息传送,利用多线程技术实现服务器端的多个TCP连接的建立。

1.3系统设计分析

一.实现网络聊天室编程,关键在于Socket通信,程序的功能都是在Socket的基础上一层一层增加的。

实现Socket通信的基本方法为以下4个步骤。

(1)在客户端与服务器端创建相应的ServerSockot/Socket实例。

(2)打开连接到Socket的输入输出流

(3)利用输入输出流,按照一定的协议(TCP协议)对Socket进行读写操作

(4)关闭输入输出流和Socket

我们要实现的功能都是在第3步对Socket的输入输出流做相应的操作

ServerSocket(port)

Socketsocket=

ServerSocket.accept()

接收连接

Close

OutputStreamInputStream

Server

通信过程

Socket(host,port)

与服务器建立连接

Close

OutputStreamInputStream

Client

二.因为是多客户端,所以必须用线程进行控制,不同的处理线程为不同的客户服务,主线程只负责循环等待,处理线程负责网络连接,接受客户输入的信息,再做相应的处理。

1.4系统功能分析

本系统可以通过网络进行聊天,采用客户端服务器模式,所以程序简介清晰易懂,而且用户都是在客户端进行活动,方便对用户的管理,也使得程序运行与差错简单起来。

采用了多线程技术,可以做到多人同时在线,提高了系统的性能,增强了系统的实用性。

有简单的客户端界面,方便用户使用。

采用的是TCP协议,这是可靠的,稳定的协议,这样不会丢失任何包,也就不会丢失任何信息。

本系统实现的功能有:

1.用户名字登录

2.用户之间的群聊

3.用户之间的私聊

4.动态刷新并显示好友列表

5.显示在线人数

6.服务器可以显示用户在线状态

7.能够退出处理

8.用户上下线提醒

 

第二章功能模块结构

2.1模块划分

服务器:

Server类模块,ServerHanderson模块,sendallclient模块,sendclientlist模块

客户端:

Client类模块,ServiceFrame窗口界面模块

ServerHander模块

2.2模块结构图

ServerHander模块

Server模块

ServerHander模块

通信过程

建立连接

ServiceFrame模块

Client模块

 

2.3模块功能

服务器:

1.Server类模块:

与客户端建立连接,通过套接字获得名字,在控制端显示提示信息

2.ServerHander模块:

提供线程管理,实现多用户的管理。

针对每一个用户发过来的消息,进行相应处理,再转发给客户。

3.Sendallclient模块:

给每个用户发送消息。

4.Sendclientlist模块:

每当有用户上线,更新每个用户的用户列表。

客户端:

1.Client类模块:

与服务端建立连接,用户登录,实现消息的群聊,私聊,用户列表的更新等功能。

2.ServiceFrame窗口界面模块:

客户端窗口界面,实现用户友好,方便用户使用,在窗口上有消息显示,用户列表,在线人数等视图信息。

 

第三章模块算法实现

3.1服务器实现

1.Server类模块:

创建ServerSocket,在指定端口监听,当有用户登录,接受套接字输入流,显示其登录信息,调用ServerHander线程进行管理。

publicServer(intport)throwsIOException{

ServerSocketserver=newServerSocket(port);

while(true){

Socketconn=server.accept();//接收客户端套接字

DataInputStreamin=newDataInputStream(conn.getInputStream());

Stringwho=in.readUTF();

System.out.print("Client"+"(ip:

"+conn.getInetAddress()+")"+who+"进入!

"+"\n");

ServerHandercn=newServerHander(who,conn);

cn.start();

}

}

2.Sendallclient模块:

把msg消息发送给每一个用户。

其中allclients是ServerHander的枚举类型,可以指向每一个用户。

protectedstaticvoidsendallclient(Stringmsg){

synchronized(clientlist){

Enumerationallclients=clientlist.elements();

while(allclients.hasMoreElements())

{

ServerHanderserh=(ServerHander)allclients.nextElement();

try{

serh.out.writeUTF(msg);

serh.out.flush();

}

catch(IOExceptionexc){

serh.interrupt();

}

}

}

}

 

3.Sendclientlist模块:

更新用户列表,当有新用户上线时,对以前的用户的好友列表,加上这个新用户名字,对于这个新用户,加上所有用户的名字。

实现方法是在名字信息后面加上“$”关键字,这样客户端接收到这个关键字时,做相应处理。

publicstaticsynchronizedvoidsendclientlist(){

for(intj=0;j

{

ServerHanderallclients1=clientlist.elementAt(j);

if(j==clientlist.size()-1)//若是新增用户,把vector中的所有用户都发送过去

{

for(inti=0;i

{

ServerHanderallclients2=clientlist.elementAt(i);

try{

allclients1.out.writeUTF(allclients2.who+"$");

allclients1.out.flush();

}catch(IOExceptionexc){

allclients1.interrupt();

}

}

}

else{//老用户,只增加新来的用户

ServerHanderallclients3=clientlist.lastElement();

try{

allclients1.out.writeUTF(allclients3.who+"$");

allclients1.out.flush();

}catch(IOExceptionexc){

allclients1.interrupt();

}

}

}

}

4.ServerHander模块:

关键模块,与客户端进行消息的交互,相互加关键字,解密关键字,做到上下线提醒,群聊,私聊等功能。

创建ServerHander的Vector对象,可以方便用户管理,Vector对象是可变数组,而且支持线程同步,适合在网络编程中使用。

对用户发送过来的消息通过关键字@进行解析,@前面的字符串为发送的消息,后面的字符串为发送对象,若发送给所有人,则直接发送,若发送给某个人,则在发送的消息后面再加上关键字@,让客户端去解析。

有用户下线,发送下线消息,通过‘下线’关键字,可以在客户端更新用户列表。

classServerHanderextendsThread{

Socketsocket;

DataInputStreamin;

DataOutputStreamout;

Stringwho;

protectedstaticVectorclientlist=newVector();//把用户线程放入可变对象数组

publicServerHander(Stringname,Socketsocket)throwsIOException{

this.who=name;

this.socket=socket;

in=newDataInputStream(newBufferedInputStream(socket.getInputStream()));

out=newDataOutputStream(newBufferedOutputStream(socket.getOutputStream()));

}

publicvoidrun(){

try{

clientlist.addElement(this);//VECTOR中增加新线程

sendallclient(who+"上线");

s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1