惠州学院网络通信程序设计课程设计.docx
- 文档编号:17801038
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:25
- 大小:2.18MB
惠州学院网络通信程序设计课程设计.docx
《惠州学院网络通信程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《惠州学院网络通信程序设计课程设计.docx(25页珍藏版)》请在冰点文库上搜索。
惠州学院网络通信程序设计课程设计
惠州学院
HUIZHOUUNIVERSITY
网络通信程序设计课程设计
中文题目:
miniQQ2012局域网通信系统
英文题目:
miniQQ2012LANcommunicationsystem
姓名:
林泽全
班级:
09网络工程
学号:
091402116
完成时间:
2012年6月
指导老师:
肖东老师
摘要
即时通信在广域网上飞速发展,由于越来越多的企业对于电子化办公的深入,即时通信系统对于局域网中的需求增多。
本文首先介绍了即时通信的开发背景、应用价值和意义等,然后对网络协议、多线程处理等即时通信的关键技术进行了分析和研究。
在此基础上实现了一个基于JAVA的局域网即时通信系统的基本模型。
此系统使用多线程处理来改进系统。
通过实验,在局域网环境下此系统运行良好,能实现即时通信的基本功能。
关键词:
即时通信,局域网,多线程,网络协议
Abstract
InstantcommunicationovertheWANrapiddevelopment,moreandmoreenterprisesin-depthfortheelectronicoffice,theincreaseddemandforinstantmessagingsystemforLAN.Thispaperfirstintroducesthedevelopmentbackgroundoftheinstantcommunication,valueandsignificance,thenthekeytechnologiesofinstantcommunicationonthenetworkprotocol,multi-threadedprocessing,analysisandresearch.Onthisbasis,thebasicmodelofaLANinstantmessagingsystembasedonJAVA.Thissystemusesmultithreadingtoimprovethesystem.ThroughexperimentsintheLANenvironment,thissystemisrunningwell,toachievethebasicfunctionsofinstantmessaging.
Keywords:
instantmessaging,LAN,multi-threaded,networkprotocol
目录
1.引言4
1.1.开发背景与意义4
1.2.开发工具与语言简介4
2.正文5
2.1.需求分析5
2.1.1.系统功能要求设计6
2.1.2.系统的模块设计6
2.1.3.系统的性能需求7
2.2.总体设计8
2.2.1.系统结构图8
2.2.2.层次功能图8
2.2.3.系统流程9
2.3.详细设计9
2.4.系统实现16
2.5.调试、运行和维护18
2.5.1.黑盒测试19
2.5.2.白盒测试19
2.5.3.调试19
3.结束语20
参考文献21
评分表22
1.
引言
1.1.开发背景与意义
随着互联网技术信息技术的迅猛发展以及计算机技术的广泛应用,即时通信IM(InstantMessaging)作为一种方便、高效、廉价的交流方式被广泛运用于局域网(LAN)乃至广域网(WAN)。
为人们的日常交流和资源共享以及传送信息和文件提供了方便、即时通信(IM)软件应运而生,且立即风靡全球。
现在我国流行的IM软件种类繁多,主要有国内腾讯公司的QQ,国外的有MSN、Skype、ICQ、AIM、X-lite、YahooMessenger等。
但在广域网的限制下主流即时通信软件服务器无法连接,这时开发局域网内的即时通信软件显得尤为重要。
本软件(miniQQ2012)实现设计一个局域网即时通信软件,实现点对多、点对多即时通信,方便在局域网下的人们工作与交流。
1.2.开发工具与语言简介
(1)JAVA
Java编程语言的风格十分接近C、C++语言。
Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
在JavaSE1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。
它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。
不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。
但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。
与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。
全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。
“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。
这与微软公司所倡导的注重精英和封闭式的模式完全不同。
Sun公司对Java编程语言的解释是:
Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。
Java平台是基于Java语言的平台。
这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。
(2)Swing
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event
2.正文
2.1.需求分析
需求分析的过程可以说是一个对具体问题的反复理解和抽象的过程。
理解就是对现实问题的理解,要弄清楚究竟需要解决什么问题。
抽象就是出去问题的表面,提取问题的本质,建立问题的逻辑模型,以便于以后阶段的系统的设计实现。
需求分析阶段是软件产品生命周期中的一个重要阶段,其根本任务是确定用户对软件系统的需求。
所谓需求是指用户对软件的功能和性能的要求,就是用户希望软件能做什么事情,完成什么样的功能,达到什么性能。
通常需求分为两种类型:
一种是功能性需求,一种是非功能性需求,这一点也需要有一种清楚的认识。
功能性需求是指需要计算机系统解决的问题,也就是对数据的处理要求,这是一类最主要的需求。
非功能性需求是指实际使用环境所要求的需求,往往是一些限制要求。
例如:
性能要求,可靠性要求,安全保密要求,等等。
1.
2.
2.1.
2.1.1.系统功能要求设计
(1)服务器状态管理:
主要实现管理员(miniQQ服务器端)开启聊天服务或关闭聊天服务
(2)在线用户管理:
主要实现管理员查看用户聊天内容是否违反相关规定
(3)用户状态管理:
主要实现管理员监视在线用户状态
(4)发送系统消息:
主要实现管理员向在线的所有用户或者某用户发送消息
(5)登入登出聊天室:
主要实现用户运行客户端,登入或登出聊天室
(6)发送群聊信息:
主要实现用户与聊天室所有人聊天
(7)点对点私聊:
主要实现用户选择某个人,进行私聊
(8)发送聊天心情:
主要实现用户在聊天过程中,发送聊天心情
因此,细化后的需求规格说明表如下所示:
需求规格
说明
服务器状态管理
管理员通过服务器端开启或关闭聊天服务
在线用户管理
管理员查看用户的聊天内容
用户状态管理
管理员查看在线用户
发送系统消息
管理员向在线所有用户或某个用户发送消息
登入登出聊天室
用户登入或登出聊天室
发送群聊信息
用户与聊天室所有人聊天
点对点私聊
用户与其他某个在线用户私聊
发送聊天心情
用户在聊天过程中,发送聊天心情
2.1.2.系统的模块设计
(1)服务器端模块
(2)客户端模块
2.1.3.系统的性能需求
(1)硬件要求
服务器端使用性能较好的服务器,客户端使用普通家庭的PC机。
(2)软件要求
服务器端和客户端机器上都需要安装Windows2000以上操作系统,JDK1.6及以上版本。
2.2.总体设计
在系统的需求分析阶段,我们已经知道系统“做什么”的问题了,现在我们要进入软件设计的阶段,去解决“怎么做”的问题。
在软件设计阶段,它分为总体设计和详细设计。
首先做总体设计,它是将软件的需求转化为数据结构和软件的系统结构。
然后是详细设计,即过程设计,通过对结构表示进行细化,得到软件的详细的数据结构和算法。
2.2.1.系统结构图
基于以上的分析和研究,本文设计实现一个基于java的局域网通信系统。
该系统主要由客户端和服务器端两部分组成。
系统结构图如下图所示:
2.2.2.层次功能图
根据上面需求的分析,我们可以得到系统的层次功能图,结构如下所示:
2.2.3.系统流程
2.3.详细设计
总体设计完成了软件系统的概要设计,规定了各个模块的功能以及模块之间的联系,进一步就要考虑实现各个模块规定的功能,这就是要进行详细设计。
在详细设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。
该系统采用多线程,基于Java平台。
同时,采用自己编写程序皮肤,开发出界面友好、舒服的交互界面。
同时添加了托盘功能、消息声音提示功能等附加功能。
(1)服务器端多线程接受用户连接请求的ServerAccessUserThread类
publicclassServerAccessUserThreadextendsThread{
/*实例化SeverSocket对象*/
ServerSocketserver;
JComboBoxcombobox;
JTextAreatextarea;
JTextFieldtextfield;
UserListuserInfoList;
/*实例化用户对象*/
Userclient;
ServerReceiveThreadrecvThread;
publicbooleanisStop;
/*构造函数,将相关控件传给ServerSocket线程*/
publicServerAccessUserThread(ServerSocketserver,JComboBoxcombobox,JTextAreatextarea,JTextFieldtextfield,UserListuserInfoList){
this.server=server;
bobox=combobox;
this.textarea=textarea;
this.textfield=textfield;
this.userInfoList=userInfoList;
isStop=false;
}
publicvoidrun(){
while(!
isStop&&!
server.isClosed()){
/*实例化用户节点*/
client=newUser();
try{
/*实例化一个server*/
client.socket=server.accept();
/*获取用户的输入和输出显示到相应控件*/
client.output=newObjectOutputStream(client.socket.getOutputStream());
client.output.flush();
client.input=newObjectInputStream(client.socket.getInputStream());
client.username=(String)client.input.readObject();
combobox.addItem(client.username);
userInfoList.add(client);
textarea.append("user【"+client.username+"】上线"+"\n");
textfield.setText("当前有"+userInfoList.getCount()+"人在线\n");
/*实例化消息接收线程,并将线程开启*/
recvThread=newServerReceiveThread(textarea,textfield,combobox,client,userInfoList);
recvThread.start();
}catch(IOExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
}
}
}
(2)服务器端用户类User
publicclassUser{
Stringusername=null;
Socketsocket=null;
ObjectOutputStreamoutput=null;
ObjectInputStreaminput=null;
Usernext=null;
}
(3)服务器端用户列表类UserList
publicclassUserList{
Userroot;
Userpointer;
intcount;
publicUserList(){
root=newUser();
root.next=null;
pointer=null;
count=0;
}
publicvoidadd(Usern){
pointer=root;
while(pointer.next!
=null){
pointer=pointer.next;
}
pointer.next=n;
n.next=null;
count++;
}
publicvoiddel(Usern){
pointer=root;
while(pointer.next!
=null){
if(pointer.next==n){
pointer.next=pointer.next.next;
count--;
break;
}
}
}
publicintgetCount(){
returncount;
}
publicUserfind(Stringusername){
if(count==0){
returnnull;
}
pointer=root;
while(pointer.next!
=null){
pointer=pointer.next;
if(pointer.username.equalsIgnoreCase(username)){
returnpointer;
}
}
returnnull;
}
publicUserfind(intindex){
if(count==0){
returnnull;
}
if(index<0){
returnnull;
}
pointer=root;
inti=0;
while(i if(pointer.next! =null){ pointer=pointer.next; }else{ returnnull; } i++; } returnpointer; } } (4)客户端多线程类ClientReceiveThread publicclassClientReceiveThreadextendsThread{ privateJComboBoxcombobox; privateJTextAreatextarea; Socketsocket; ObjectOutputStreamoutput; ObjectInputStreaminput; publicClientReceiveThread(Socketsocket,ObjectOutputStreamoutput, ObjectInputStreaminput,JComboBoxcombobox,JTextAreatextarea){ this.socket=socket; this.output=output; this.input=input; bobox=combobox; this.textarea=textarea; } publicvoidrun(){ while(! socket.isClosed()){ try{ Stringtype=(String)input.readObject(); if(type.equalsIgnoreCase("系统信息")){ Stringsysmsg=(String)input.readObject(); textarea.append("系统信息: "+sysmsg); }elseif(type.equalsIgnoreCase("服务器关闭")){ output.close(); input.close(); socket.close(); textarea.append("服务器已关闭! \n"); break; }elseif(type.equalsIgnoreCase("聊天信息")){ Stringmessage=(String)input.readObject(); textarea.append(message); }elseif(type.equalsIgnoreCase("用户列表")){ Stringuserlist=(String)input.readObject(); String[]usernames=userlist.split("\n"); combobox.removeAllItems(); inti=0; combobox.addItem("所有人"); while(i combobox.addItem(usernames[i]); i++; } combobox.setSelectedIndex(0); } }catch(IOExceptione){ e.printStackTrace(); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } } } (5)系统托盘功能实现方法SystemTrayInitial /*添加托盘功能*/ publicvoidSystemTrayInitial(){ if(! SystemTray.isSupported())//判断当前系统是否支持系统栏 return; try{ Stringtitle="miniQQ2012Server";//系统栏标题 Stringcompany="Copyrightbylowkeyfromnetwork09";//系统栏内容 SystemTraysysTray=SystemTray.getSystemTray(); //系统栏图标 Imageimage=Toolkit.getDefaultToolkit().getImage("res/logo.png"); TrayIcontrayicon=newTrayIcon(image,title+"\n"+company, createMenu()); trayicon.setImageAutoSize(true); trayicon.addActionListener(newSysTrayActionListener()); sysTray.add(trayicon); trayicon.displayMessage(title,company,MessageType.INFO); }catch(Exceptione){ e.printStackTrace(); } } (6)系统界面UI中自写容器类ImagePanel publicclassImagePanelextendsJPanel{ privatestaticfinallongserialVersionUID=-731012374666375667L; privateImageimg; /* *构造函数首先接受待绘制图像,并将其存入变量img以备后用。 接着以图像尺寸值调用setSize() *和setPreferredSize(),从而确保面板大小和该图像完全一致。 这里不得不将面板大小的首选 *值、最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 惠州 学院 网络 通信 程序设计 课程设计