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

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

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

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

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

5

2.2模块结构图·

2.1模块功能·

第三章模块算法实现

3.1服务器实现·

6

3.2客户端实现·

9

第四章运行结果

13

第五章课程设计总结

17

第六章附录

6.1参考文献·

19

6.2源代码·

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)

与服务器建立连接

Client

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

1.4系统功能分析

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

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

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

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

本系统实现的功能有:

1.用户名字登录

2.用户之间的群聊

3.用户之间的私聊

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

5.显示在线人数

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

7.能够退出处理

8.用户上下线提醒

2.1模块划分

服务器:

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

客户端:

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

ServerHander模块

2.2模块结构图

Server模块

建立连接

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){

Enumeration<

ServerHander>

allclients=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<

clientlist.size();

j++)

ServerHanderallclients1=clientlist.elementAt(j);

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

{

for(inti=0;

i<

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;

protectedstaticVector<

clientlist=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