网络聊天程序.docx

上传人:b****7 文档编号:10209060 上传时间:2023-02-09 格式:DOCX 页数:40 大小:171.92KB
下载 相关 举报
网络聊天程序.docx_第1页
第1页 / 共40页
网络聊天程序.docx_第2页
第2页 / 共40页
网络聊天程序.docx_第3页
第3页 / 共40页
网络聊天程序.docx_第4页
第4页 / 共40页
网络聊天程序.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

网络聊天程序.docx

《网络聊天程序.docx》由会员分享,可在线阅读,更多相关《网络聊天程序.docx(40页珍藏版)》请在冰豆网上搜索。

网络聊天程序.docx

网络聊天程序

网络聊天程序

一总的概述

随着时代的进步和科技创新的发展,计算机领域已经和我们的生活紧密联系在一起,使用计算机的人数日益增多,而网络聊天也越来越受到广大青少年的欢迎。

即时通讯软件的出现正在逐渐改变人们的沟通与交际方式。

无论近在咫尺,还是远隔重洋,也只是在键盘和鼠标之间就可以解决问题。

即时通讯服务非常适合企业内部或企业和客户之间的交流。

而且将即时通讯服务和手机移动等服务结合,将更大地提高工作效率。

网络聊天程序,越来越影响着我们的网络生活。

习惯了通过类似ICQ、QQ、MSN之类的程序和分布全国各地的朋友聊天、发信息,不过所有聊天程序都需要Internet的支持,而无法在局域网内部进行通信,因此开发局域网聊天程序就有了必要性。

本次课程设计的目的在于能通过局域网实现通信功能,不用上Internet就可以轻松体验到内网聊天的便利和快捷,让同学们不出局域网就能自由聊天。

此次设计的网路聊天程序虽然其功能简单,但是在开发技术和过程中,能够充分学习和使用java的技术,进一步学习面向对象程序设计的思想,加深对面向对象程序设计的理解与认识。

这次设计主要涉及到的java知识包括文件输入输出流,图形用户界面(GUI),多线程以及网络编程技术,主要需要处理好客户端和服务端之间的通信,包括点对点和多对多的即时通信。

二需求分析

人们日常生活中越来越多地使用聊天程序来为自己的工作和学习服务。

一个操作简单,界面友好、运行稳定的聊天程序对于小型局域网的用户可以起到很好的交流作用。

所谓网络聊天程序就是一个可以让许多用户同时互相通信的网上交流工具,个人用户可以通过聊天程序将自己更好地融入集体之中。

网络聊天程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。

其中服务器端程序负责监听客户信息和转发客户端发送来的信息,客户端程序包括登录界面和聊天界面,可以连接到服务器并将消息发送到服务器端和接受服务器端发送来的消息。

用户对聊天程序的需求如下:

聊天程序能自动侦测局域网内部启动该程序的用户,并显示在用户列表中,可以进行两个人之间点对点的私聊和多人之间的群聊,并且相互之间可以发送文件。

聊天功能:

可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,聊天过程中能对字体、表情等进行设定。

文件传输功能:

用户可以共享资源,能发送及接收文件。

连接:

登录界面输入完成之后将用户的信息发送到服务器端,服务器端创建相应的连接,并将更新后的用户列表发送给所有用户。

发送:

根据发送者、发送对象、发送的信息创建一个字段发送到服务器端。

接收:

根据从服务器端接收到的信息判断发送者、接受者、以及要监听的信息,选择显示在公共聊天区还是私人聊天区。

系统稳定:

客户端与服务端的连接稳定,不出现或者少出现连接不上的情况。

对这次设计来说,基于局域网的网络聊天程序可以有多个用户,只需要在一台服务器上运行服务端程序,所有的用户连接上以后就可以进行正常通信。

该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、注销、查看在线用户等。

三功能描述

基于局域网的网络聊天程序主要包括进行即时通信的服务端和客户端,通过套接字socket进行连接,JavaAPI为处理套接字的通信提供了一个类.Socket.,服务器端采用多线程,一个用来接收用户信息,一个用来转发用户信息(继承Thread类,复写run方法或实现runnable接口来创建线程)以满足多用户的请求,通过创建一个ServerSocket对象来监听来自客户的连接请求,聊天程序设置的服务端默认IP地址为:

127.0.0.1(即本机默认IP地址),默认端口号为8000。

此外,所有的聊天信息通过文件输入输出流,都将被保存到文件当中。

(1)服务端设置:

功能描述:

只有在服务端开启的情况下,用户才能成功登录和进行聊天活动,同时用户设置的地址端口也必须与服务器端的侦听端口(不是网线接的物理端口,只是数字标识的逻辑端口)一致,否则不能登录。

(2)系统消息:

功能描述:

服务端正常运行的过程中,在聊天室的每一个用户都能接收服务器端发送的提示信息。

(3)用户设置:

功能描述:

用户自定义自己的登录用户名,成功设置后,服务端能接收到新设置的用户名。

(4)登录功能:

功能描述:

在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态。

(5)公共聊天:

功能描述:

用户在聊天界面中可以选择与所有人聊天,聊天界面中的其他在线用户可以正常接收并正确显示公聊消息,类似于群聊。

(6)私人聊天:

功能描述:

用户可以选择与聊天界面在线用户列表中的其他用户聊天,双方的聊天信息对于聊天界面中的其他用户是不可见的。

(7)聊天心情:

功能描述:

用户在聊天的过程中可以选择相应的心情来表达自己的情绪,类似QQ中的表情。

(8)用户的状态.:

功能描述:

每一个客户端用户都可以实时看到目前其他在线用户的状态。

(9)用户退出:

功能描述:

用户可以在正常情况下退出聊天程序。

网络聊天程序主要包括以下两大功能模块:

3.1服务端管理模块

(1)端口管理:

设置服务器的端口号,输入要侦听的端口,默认为8000。

(2)启动服务器:

启动服务器,并开始在设置的端口中侦听相关信息,客户端用户可以开始登录并开始聊天活动。

(3)停止服务器:

中断某个或多个客户端的服务,被中断的客户端用户不能再进行聊天,其他用户不受影响。

(4)发送系统消息:

服务器端给所有人或者个别用户发送消息。

(5)显示消息:

可以显示所有用户的聊天记录,以及上线和下线的相关信息。

(6)关闭服务器:

退出服务器端程序,并结束服务,所有用户不能继续聊天。

服务端管理模块的功能结构图如图3.1所示:

图3.1服务器端管理模块

3.2客户端管理模块

(1)用户登录:

在聊天程序服务端已开启的情况下,用户才能进行登录,用户登录之后才能开始聊天,登录后不能再对用户设置和连接设置进行修改。

(2)连接设置:

用户可以设置自己要使用的服务器的IP地址和端口号,默认的连接地址为:

IP地址为127.0.0.1,端口号为8000。

(3)用户设置:

用户可以设置自己的用户名,类似QQ上的网名来进行聊天。

(4)聊天信息管理:

包括发送和接受信息,用户可以给所有人或者个别用户发送信息,并能看到其他用户发送给自己或所有人的消息。

(5)用户注销:

退出聊天,可以继续修改用户设置和连接设置。

(6)关闭客户端:

关闭所有聊天并退出客户端,即退出客户端程序。

客户端管理模块的功能结构图如图3.2所示:

图3.2客户端管理模块

四流程图

4.1服务端流程图

图4.1系统总体流程图

详细描述:

运行服务端程序后进入服务端,服务端程序采用多线程以满足多用户请求,通过设置准备侦听的端口号,或者选择默认设置的端口,启动服务端。

判断启动信息,若启动失败则返回重新启动,若启动成功则显示服务器启动成功。

启动成功后服务端开始侦听客户端的信息,如用户的上线和下线;可以发送系统消息;用户开始聊天后可以接收和发送用户的消息。

关闭服务端,即退出服务端程序,客户端用户不能再登录,也无法进行聊天活动。

4.2客户端流程图

图4.2系统客户端流程图

详细描述:

运行客户端程序进入客户端,进行相应的用户设置和连接设置,如设置用户名和要访问的服务器的IP地址和端口号,或者选择默认的IP地址和端口号。

点击登录按钮,登录成功后进入用户聊天界面,若登录失败可以返回重新进行登录。

在用户聊天界面用户可以选择聊天对象进行相应的聊天活动,可以对字体进行相关设置,在聊天消息中加入相应的表情(注:

如高兴或悲伤),点击发送按钮则可以将消息发送出去。

点击注销按钮,可以重新设置要访问的服务器IP地址和端口号。

用户可以和多人进行聊天,点击关闭按钮关闭当前聊天界面,点击退出按钮后客户端关闭,结束所有聊天。

五类的设计

5.1服务端类的设计

在服务器端使用到的类如下:

ChatServer.java:

包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。

调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端消息的接收和发送。

publicclassChatServerextendsJFrameimplementsActionListener{

publicChatServer(){init();}

publicvoidinit(){}//程序初始化

publicvoidactionPerformed(ActionEvente){}//事件处理

publicvoidstartService(){}//启动服务端

publicvoidstopService(){}//关闭服务端

publicvoidsendStopToAll(){}//向所有人发送服务器关闭的消息

publicvoidsendMsgToAll(Stringmsg){}//向所有人发送消息

publicvoidsendSystemMessage(){}//向客户端用户发送消息

publicstaticvoidmain(String[]args){}

}

ServerReceive.java:

包含名为ServerReceive的public类,用于实现服务器端的消息的接收与发送。

该类分别定义了向某个用户或所有人发送消息的方法,发送的消息会显示在主界面类的界面上。

publicclassServerReceiveextendsThread{

publicServerReceive(){}

publicvoidrun(){}

publicvoidsendToAll(Stringmsg){}//向所有人发送消息

publicvoidsendUserList(){}//向所有人发送用户的列表

}

ServerListen.java:

包含名为ServerListen的public类,用于实现服务端上线与下线的侦听。

该类对用户上线和下线的侦听是通过调用用户链表类来实现的,当用户的上线和下线情况发生改变时,将会对ServerListen类的界面进行相应的修改。

publicclassServerListenextendsThread{

publicServerListen(){}

publicvoidrun(){}

}

PortConf.java:

包含名为PortConf的public类,继承自JDialog,主要用于修改用户对服务器端侦听端口的配置。

publicclassPortConfextendsJDialog{

publicPortConf(JFrameframe){jbInit();}

privatevoidjbInit()throwsException{}

}

UserLinkList.java:

包含名为UserLinkList的public类,具体实现用户链表节点。

通过构造函数构造用户链表,定义了添加用户,删除用户,返回用户数目,根据用户名查找用户,根据索引值查找用户这5个方法。

publicclassUserLinkList{

publicUserLinkList(){}//构造用户链表

publicvoidaddUser(Noden){}//添加用户

publicvoiddelUser(Noden){}//删除用户

publicintgetCount(){}//返回用户数

publicNodefindUser(Stringusername){}//根据用户名查找用户

publicNodefindUser(intindex){}//根据索引查找用户

}

Node.java:

包含了名为Node的public类,具体实现用户链表的节点,定义了链表中的用户。

publicclassNode{}

Help.java:

包含名为Help的public类,继承自JDialog,主要是在服务端提供相应的帮助信息。

publicclassHelpextendsJDialog{

publicHelp(JFrameframe){jbInit();}

privatevoidjbInit()throwsException{}

}

5.2客户端类的设计

在客户端使用到的类如下:

ChatClient.java:

包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。

定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。

当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送消息。

publicclassChatClientextendsJFrameimplementsActionListener{

publicChatClient(){init();}

publicvoidinit(){}//程序初始化

publicvoidactionPerformed(ActionEvente){}//事件处理

publicvoidConnect(){}//Connect方法

publicvoidDisConnect(){}//DisConnect方法

publicvoidSendMessage(){}//发送消息

publicstaticvoidmain(String[]args){}

}

ClientReceive.java:

包含名为ClientReceive的public类,用于实现服务器端与客户端消息的接收和发送。

publicclassClientReceiveextendsThread{

publicClientReceive(){}

publicvoidrun(){}

}

UserConf.java:

包含名为UserConf的public类,继承自JDialog,主要用于修改用户对连接到服务器所显示的用户名的设置。

publicclassUserConfextendsJDialog{

publicUserConf(){jbInit();}

privatevoidjbInit()throwsException{}

}

ConnectConf.java:

包含名为ConnectConf的public类,继承自JDialog,主要用于修改用户对所要连接的服务器IP及侦听端口的配置。

publicclassConnectConfextendsJDialog{

publicConnectConf(){jbInit();}

privatevoidjbInit()throwsException{}

}

Help.java:

包含名为Help的public类,继承自JDialog,主要是给客户端用户提供相应的帮助信息。

publicclassHelpextendsJDialog{

publicHelp(JFrameframe){jbInit();}

privatevoidjbInit()throwsException{}

}

六界面设计

6.1服务端界面设计

6.1.1服务端界面

服务端界面包括菜单栏和工具栏,其中菜单栏包括服务和帮助,工具栏包括端口设置,启动服务,停止服务,退出按钮,下方包括聊天对象选择列表和发送消息文本框和发送按钮。

如图6.1.1所示:

6.1.1服务端界面

6.1.2端口设置界面

服务端的端口设置界面主要包括输入端口号文本框,默认的端口号,保存按钮和取消按钮。

界面如图6.1.2所示:

6.1.2端口设置界面

6.1.3帮助界面

服务端的帮助界面主要包括一段提示信息文本和一个关闭按钮。

界面如图6.1.3所示:

6.1.3服务端帮助界面

6.2客户端界面设计

6.2.1客户端界面

客户端界面包括菜单栏和工具栏,其中菜单栏包括操作、设置和帮助,工具栏包括用户设置,连接设置,登录,注销和退出按钮,下方包括聊天对象选择列表,表情选择列表,发送消息文本框和发送按钮。

如图6.2.1所示:

6.2.1客户端界面

6.2.2连接设置界面

客户端连接设置界面主要包括输入服务器的ip地址和服务器的端口号,默认的连接设置,保存按钮和取消按钮。

界面如图6.2.2所示:

6.2.2连接设置界面

6.2.3用户设置界面

客户端用户设置界面主要包括输入用户名文本框和默认用户名文本,保存按钮和取消按钮。

界面如图6.2.3所示:

6.2.3用户设置界面

6.2.4帮助界面

客户端帮助界面主要包括一段提示信息的文本和一个关闭按钮。

界面如图6.2.4所示:

6.2.4客户端帮助界面

七功能实现

7.1服务端功能的实现

7.1.1端口管理

端口管理的主要代码如下:

publicvoidactionPerformed(ActionEvente){

Objectobj=e.getSource();

if(obj==portSet||obj==portItem){

PortConfportConf=newPortConf(this);//调出端口设置的对话框

portConf.show();//端口设置

}

}

publicclassPortConfextendsJDialog{

privatestaticfinallongserialVersionUID=1L;

JPanelpanelPort=newJPanel();

JButtonsave=newJButton();

JButtoncancel=newJButton();

publicstaticJLabelDLGINFO=newJLabel("默认端口号为:

8000");

JPanelpanelSave=newJPanel();

JLabelmessage=newJLabel();

publicstaticJTextFieldportNumber;

publicPortConf(JFrameframe){

super(frame,true);

try{

jbInit();

}

catch(Exceptione){

e.printStackTrace();

}

//设置运行位置,使对话框居中

DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

this.setLocation((int)(screenSize.width-400)/2+50,

(int)(screenSize.height-600)/2+150);

this.setResizable(false);

}

privatevoidjbInit()throwsException{

this.setSize(newDimension(300,120));

this.setTitle("端口设置");

message.setText("请输入侦听的端口号:

");

portNumber=newJTextField(10);

portNumber.setText(""+ChatServer.port);

save.setText("保存");

cancel.setText("取消");

panelPort.setLayout(newFlowLayout());

panelPort.add(message);

panelPort.add(portNumber);

panelSave.add(newLabel(""));

panelSave.add(save);

panelSave.add(cancel);

panelSave.add(newLabel(""));

ContainercontentPane=getContentPane();

contentPane.setLayout(newBorderLayout());

contentPane.add(panelPort,BorderLayout.NORTH);

contentPane.add(DLGINFO,BorderLayout.CENTER);

contentPane.add(panelSave,BorderLayout.SOUTH);

//保存按钮的事件处理

save.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventa){

intsavePort;

try{

savePort=Integer.parseInt(PortConf.portNumber.getText());

if(savePort<1||savePort>65535){

PortConf.DLGINFO.setText("侦听端口必须是0-65535之间的整数!

");

PortConf.portNumber.setText("");

return;

}

ChatServer.port=savePort;

dispose();

}

catch(NumberFormatExceptione){

PortConf.DLGINFO.setText("错误的端口号,端口号请填写整数!

");

PortConf.portNumber.setText("");

return;

}

}

}

);

//关闭对话框时的操作

this.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

DLGINFO.setText("默认端口号为:

8000");

}

});

//取消按钮的事件处理

cancel.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

DLGINFO.set

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

当前位置:首页 > PPT模板 > 商务科技

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

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