基于JAVA套接字的多点互动通讯的毕业设计.docx
- 文档编号:5054807
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:20
- 大小:363.71KB
基于JAVA套接字的多点互动通讯的毕业设计.docx
《基于JAVA套接字的多点互动通讯的毕业设计.docx》由会员分享,可在线阅读,更多相关《基于JAVA套接字的多点互动通讯的毕业设计.docx(20页珍藏版)》请在冰豆网上搜索。
基于JAVA套接字的多点互动通讯的毕业设计
目录
1前言2
1.1课题选择背景2
1.2即时通讯的特点2
1.3即时通讯系统的发展2
2系统需求分析3
3系统可行性分析3
4多点互动通讯系统原理3
4.1套接字通讯3
4.2数据报通信4
4.3多线程编程4
5总体设计4
5.1功能设计5
5.2界面设计6
6详细设计6
6.1服务器端详细设计6
6.2客户端详细设计10
7系统测试12
7.1服务器端测试12
7.2客户端测试15
结束语16
致谢16
参考文献17
基于JAVA套接字的实现多点互动通讯系统
XXX
(电子信息工程系指导教师:
XXX)
摘要:
在计算机网络技术飞速发展的今天,网络即时通信倍受人们的喜爱,网络即时通信比起传统的通信方式会来得更加的方便快捷。
同时,网络即时通信能够实现实时交互,并且有资费低廉的优点。
它的出现促进了人们之间的交流,成为人们生活中的一部分。
本着学习的目的,开发了这套多点互动通讯系统,来实现多个点的用户之间的相互通讯。
系统通过Java套接字实现,套接字在所有的网络操作系统中都是必不可少的,而且在所有的网络应用程序中也是必不可少的。
它是网络通信中应用程序对应的进程和网络协议之间的接口。
文章就系统的编写过程做出细致的介绍。
关键词:
即时通信;多点互动通讯系统;Java套接字
Multiple-pointCommunicationSystembasedonJAVASocketTechniques
XXX
(Electronic&InformationEngineeringDepartment,Supervisor:
XXX)
Abstract:
Withthefast-developingofcomputerInternettechnology,peoplefavourmoreaboutinstantcommunicationonInternet.Comparedwiththetraditionalcommunicationmethods,itisofgreatadvantageofbeingconvenientandquickly,meanwhile,theNet-workinstantcommunicationcanrealizedynamicinteractbetweencomputerandusers,moreover,itwon’tcostalot.Instanttelecommunicationisgraduallybecomingapartofpeoplelife,forthatitreallypromotesmutualcommunication.Forthepurposeofstudy,IdevelopedasetofMultiple-pointcommunicationsystem,whichtendstoaccomplishdifferentusers’communicationwitheachother.ThesystemthroughtheJavasocketrealize,socketsinallthenetworkoperatingsystemisindispensable,andinallthenetworkapplicationisalsoessential.Itisofnetworkcommunicationapplicationcorrespondingprocessandnetworkprotocoloftheinterfacebetween.Followsarethedetailedintroductionformysystem.
Keywords:
Instantcommunication;Mutiple-pointcommunicationsystem;Javasocket
1前言
众所周知,现在网络正在飞速的发展和不断的完善成熟。
人们通过网络聊天工具来进行交流、联系也变得越来越普遍。
本课题研究的就是一个即时通讯系统:
多点互动通讯的系统,本系统需要用到Java语言来进行编写。
1.1课题选择背景
在当今,网络通讯技术迅猛发展。
通过即时通讯方式进行交流也变成家常便饭,备受人们喜爱。
即时通讯工具可以实现远距离的交流,促进人们之间的联系,使远距离的快速通讯成为现实,加快了消息传播的速度。
把世界的所有地方和角落联系在一起,变成了一个地球村。
如今常用的即时通讯工具有很多,例如ICQ。
我们知道ICQ是最早的即时通讯软件,也是现在最流行的即时通讯工具之一。
ICQ是“Iseekyou”的谐音。
翻译过来就是“我在找你”的意思。
无论你人在何地何处,只要记得想联系的人的号码,上网打开ICQ,就能随心所欲的交流。
目前有种类众多的即时通讯系统,能实现的功能也较为丰富。
本课题目的是为了实现多点的通讯,多点实现彼此之间可靠地交流。
提高一定的安全和工作效率。
本课题能使自己熟练掌握即时通讯的原理和机制,为自己以后网络通讯编程打下坚实的基础。
此系统分为客户端部分、服务器部分。
能够支持局域网和因特网。
通过连接网络,就能实现用户之间的联系。
大大提高了多个点的用户之间的通讯和办事效率。
QQ、MSN等都是我们身边的公共通讯系统,针对性不强。
并且想要聊天的对象、聊天的内容不好控制。
如果使用在在局域网内部的话。
工作的效率和安全都有可能会降低。
然而该系统是放在自己的服务器上运行的。
由自己内部的人员管理。
这样能很好的解决效率和安全的问题。
即时通讯增加了更多的互动性。
当人们在表达自己的想法、意见时。
总是采用你来我往的方式。
此方法带来了更多的互动。
通过使用即时通讯系统,人们不再需要借助打电话、发短信等方式就能在线实时地交流工作。
1.2即时通讯的特点
即时通讯是指能够即时发送和接收互联网消息等的业务。
即时通讯是即时的。
[1]大部分的即时通讯服务提供了presenceawareness的特性──显示联络人名单,联络人是否在在线与能否与联络人交谈。
在早期的即时通讯程序中,使用者输入的每一个字符都会即时显示在双方的银幕,且每一个字符的删除与修改都会即时的反应在银幕上。
这种模式比起使用e-mail更像是电话交谈,充分体现了其实时特性。
在现在的即时通讯程序中,为了画面的完整美观和交流方便,交谈中的另一方通常只会在本地端按下送出键(Enter或是Ctrl+Enter)后才会看到信息。
1.3即时通讯系统的发展
20世纪70年代早期,柏拉图系统(PLATOsystem)是一个比较早的即时通讯形式。
80年代,UNIX/Linux的即时交谈被使用在工程师与学术界。
当时有一定的影响力。
到了90年代,即时通讯可以跨越操作系统平台进行交流,1996年11月,ICO的出现标志着首个非UNIX/Linux使用者用于因特网的即时通讯的系统软件。
ICO应用很广泛,它的诞生促成了现在许多流行使用的即时通讯软件。
ICO是由几个年轻的以色列人于1996年开发出来,考虑到无人投资,ICO公司决定提供全球互联网用户免费下载使用软件。
随着时间的推移,使用此软件的人数以每月100万的速度增加。
成为许多看重其巨大商业广告价值的大公司争着购买的对象。
1998年,ICO公司把这有巨大发展潜力的软件和用户一起以2.87亿美元的天价卖给了AOL。
如今ICO有1亿多使用者,它的主要市场是在欧洲和美洲,可以说它是世界上最大的即时通讯系统。
2系统需求分析
随着计算机技术、网络技术的飞速发展,网络早已经是我们生活中必不可少的一部分。
人们通过网络方式获取信息的需求越来越高。
也对获取信息是否方便快捷提出了更高的要求,在这种社会氛围下促进了即时通讯系统软件的发展,也因为即时通讯的方便快捷的优点使得其越来越受到人们的青睐。
近些年,用户使用即时通讯系统软件的频率越来越高,它已经取代了e-mail在人们生活中的重要性。
成为了用户之间交流、联系的最流行的软件。
因此,对通讯系统软件的研究和开发很有很强的实际应用价值。
本系统有两大部分组成。
一个是服务器端程序:
服务器端程序能够不断的监听是否有客户端连接,服务器采用的是MYSQL数据库来存储用户数据;另一个是客户端程序:
客户端程序是在实际用户机子上运行的程序。
有注册、登陆等功能。
能够实现用户之间的即时通讯。
本系统在Java平台下进行调试和开发。
3系统可行性分析
本系统着力完成用户和用户之间的信息交流,实现多点的通讯。
从硬件设备上说,只需一台有固定IP地址的计算机被当作服务器来运行服务器程序。
几台电脑运行客户端程序,因为现在自己每个同学几乎都有一台电脑,所以要满足这要求一点也不困难。
从开发时间上说,完成此系统需要几周时间。
在几周时间内完成自己完全可以接受。
从软件上说,开发此系统需要用到软件都是免费使用的,例如:
Java平台、Eclipse调试环境等。
所以开发此系统完全是可行的。
4多点互动通讯系统原理
4.1套接字通讯
套接字的英文名为“socket”。
套接字允许程序员把网络连接当成一个流,并向这个流读写字节。
[2]
我们都知道在Java中有两个重要的类Socket和ServerSocket。
Socket和ServerSocket都被放在包中。
通过这两个类就能完成客户端与服务器、甚至是客户端与客户端的即时通讯。
首先通过ServerSocket类在服务器某固定端口等待连接,当有Socket请求连接到此服务器的此端口时,就完成Socket连接,然后相互之间就可以发送和接收信息。
4.1.1Socket类
Socket类是Java用来实现客户端TCP操作的基础类,在Java编程中,一切与TCP有关的操作,包括连接的建立、传输、连接关闭及Socket选项的设置都由Socket类负责,这个类本身使用直接代码通过主机操作系统的本地TCP栈进行通信。
Socket类的消息收发都是通过流来实现。
通过newSocket()创建需要连接的指定的服务器host和端口号port的对象,并向服务器发送连接请求。
通过close()方法关闭已建立的套接字。
4.1.2ServerSocket类
ServerSocket类能够在服务器端指定的端口监听。
ServerSocket类通过newServerSocke()能实现等待某客户端的连接请求的功能。
跟Socket一样,也是通过close()方法关闭。
4.2数据报通信
在TCP/IP协议中有一个重要的定义,那就是IP数据报(IPDatagram)。
IP数据报是在Internet上传输的包。
它和硬件的配置无关,是由两部分组成:
首部和数据。
首部的前20个字节是固定的,它是所有IP数据报都必须要有的,首部剩下部分的长度是可变的。
根据需要进行相应分配。
例如考虑排错或者安全等因素需要。
[3]
4.3多线程编程
多线程的目的是使对CPU的利用率提高到最大。
[4]操作系统由原来的单任务发展到现在能够同时进行多任务。
实现多任务就可以通过多线程。
我们知道进程是指在电脑内存运行的一个应用程序。
在内存中每个进程都是独立占用的内存空间。
一个进程可以有很多个线程在运行。
例如火车的售票系统,在售票系统运行过程中,在同一时间可能有很多人在进行买票操作。
通过多线程方式能很好解决同时进行的操作。
在操作系统中,每个线程都会有一个优先级。
优先级高的线程在正常情况下比优先级低的先执行。
Java实现多线程有两种方式:
通过继承java.lang.Thread类和实现java.lang.Runnable接口。
4.3.1Thread类
Thread类提供了用来启动、挂起、恢复以及终止线程的方法,除此之外,还提供控制线程的优先级以及线程的名字等其他方面的方法。
使用Thread类最简单的方法是扩展它,并覆盖run()方法,当线程启动时会调用这个方法。
通过覆盖run()方法,就可以使线程在后台完成一些有用的任务。
[5]
4.3.2Runnable接口
虽然扩展Thread类是创建多线程应用程序的一种方法,但是,它通常不是最好的方法。
记住,Java只支持单继承,这与支持C++这样的多继承的语言不同。
这意味着,如果一个类扩展了Thread类,它就不能扩展其他类。
更好的方法是实现Runnable接口。
Runnable接口接口定义了一个方法,run(),必须实现这个方法。
类实现这个接口,以表明它们可以作为独立的线程执行。
5总体设计
该多点互动通讯系统采用的是C/S架构,采用客户机/服务器(C/S)模式来设计,是一个二层的C/S结构,其分层机构如图1所示。
客户层也叫做应用表示层,也就是我们说的客户端,这是应用程序的用户接口部分。
给即时通讯工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。
它用于检查用户的输入数据,显示应用的输出数据。
为了使用户能直接地进行操作,客户层需要使用图形用户接口。
[6]若通讯用户变更,系统只需要改写显示控制和数据检查程序就可以了,而不会影响其他两层。
服务层又叫做功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。
例如,用户需要检查数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。
在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。
图1二层C/S结构示意图
5.1功能设计
该多点互动通讯按如下过程完成通讯:
(1)用户向服务器注册;
(2)用户注册之后,向服务器发送消息;
(3)服务器再把消息发送给相应的用户。
根据以上描述,该系统功能模块图如图2所示
图2多点互动通讯功能模块图
5.1.1服务器端功能设计
在服务器端的程序具有以下的功能实现:
(1)开启服务器程序,进行监听,接收客户端连接。
(2)接收消息、分析消息、转发消息。
(3)关闭服务器端的程序,并向所有已连客户端发送服务器端程序已关闭消息。
5.1.2客户端功能设计
在客户端的程序必须具有以下的功能实现:
(1)用户注册。
(2)请求连接服务器,并把此用户登录请求发给服务器端。
(3)随时可以向服务器发送消息。
(4)随时可以接收服务器端转发过来的消息。
(5)响应服务器端程序已关闭消息。
5.2界面设计
5.2.1服务器端功能设计
在服务器端的界面设计实现:
有两个按钮,分别是开启服务和停止服务,把这两个按钮放入一个面板中,然后把此面板放入到窗体中。
此界面能实现服务器端的服务开启和停止的功能。
5.2.2客户器界面设计
在客户端设计了五个界面:
登入界面、注册界面、好友界面、聊天界面、修改密码界面。
(1)登录界面设计实现:
在登录界面中有两个输入框,能实现用户账号和密码的输入,并且密码输入是不可见的。
还有三个按钮:
登录、取消、注册向导。
(2)注册界面设计实现:
当点击登录界面登录按钮时,进入注册界面。
注册界面能实现用户输入申请的账号,设置密码。
还设计有注册和返回按钮来方便使用者的操作。
(3)好友界面设计实现:
登录成功后,进入好友界面。
好友界面有:
我的好友、陌生人、黑名单三个按钮。
当点击我的好友时,能实现我的好友列表,当点击陌生人时,能实现陌生人列表。
(4)聊天界面设计实现:
当双击列表中某好友时,跳出与此好友聊天的界面。
聊天界面包括:
聊天内容显示、输入聊天信息、发送聊天信息。
(5)修改密码界面设计实现:
当在登录界面点击修改密码时,进入修改密码界面。
修改密码界面能实现输入账号、原有密码和需要修改的密码。
还设计有修改密码和返回按钮来方便使用者的操作。
6详细设计
6.1服务器端详细设计
6.1.1界面设计
在java程序中,我们可以通过自己编写的类继承JFrame类的方法实现要创建的窗体。
当我们用到JFrame类,我们需要导入java.awt.*和java.swing.*。
我们要在窗体内加入一个装有控制按钮的面板(JPanel)。
关键代码如下:
jPanel_show=newJPanel();
jButton_start=newJButton("启动服务器");
jButton_start.addActionListener(this);
jButton_stop=newJButton("关闭服务器");
jButton_stop.addActionListener(this);
jPanel_show.add(jButton_start);
jPanel_show.add(jButton_stop);
this.add(jPanel_show);
6.1.2功能模块的实现
本系统在C/S模式下进行开发,所以服务器端的程序设计至关重要。
下面就服务器端功能进行设计。
服务器端界面有两个按钮,分别是jButton_start和jButton_stop。
当点击jButton_start时,跳出是否开启服务器的对话框。
点击确定时显示服务器启动对话框,服务器启动后通过ServerSocketServe_socket=newServerSocket(9898)语句在服务器9898端口进行监听操作。
监听通过Serve_socket.accept()语句返回一个连接客户端的Socket。
关键代码如下:
Serve_socket=newServerSocket(Address.port);
//有连接则返回此套接字的连接.
socket=Serve_socket.accept();
接收到客户端User后判断为登录操作时,则通过UserDao类中的dao.getPwdById()方法判断MYSQL数据库中是否有此用户,有则把Message的类型设为MessageType.loginSuccess,然后通过oos.writeObject()把此消息发给客户端,并用newSerConClientThread(socket)为此用户开一个服务器端的线程为此用户服务,并加入到服务器线程类里面去,SerConClientThread类可以实现用户消息接收、消息分析、消息转发,通过Serve_thread.notifyOther(u.getUserId())通知其它在线好友此用户上线。
没有则把Message的类型设为MessageType.loginFail,然后通过oos.writeObject()把此消息发给客户端,并且关闭此Socket。
关键代码如下:
if(u.getUserTag().equals("userLogin")){
if(u.getPwd().equals(dao.getPwdById(u.getUserId()))){
//returnLoginsuceess
m.setMesType(MessageType.loginSuccess);
//返回给用户一个登入成功的消息
oos.writeObject(m);
//这里就单开一个线程,让该线程与该客户端保持通信.
SerConClientThreadServe_thread=newSerConClientThread(socket);
ManageClientThread.addClientThread(u.getUserId(),Serve_thread);
//启动与该客户端通信的线程.
Serve_thread.start();
//notifyOtherwhoonline
Serve_thread.notifyOther(u.getUserId());
}
else{
//表明FailLogin
m.setMesType(MessageType.loginFail);
oos.writeObject(m);
//关闭Socket
socket.close();
}
}
接收到客户端User后判断为注册标志时,则得到用户要注册的用户账号,通过dao.register()方法查找MYSQL数据库中是否有此用户账号,有则把Massage的类型设为注册不成功标志。
通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket;没有则在服务器端User表中加入此用户,然后把Massage的类型设为注册成功标志,通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket。
关键代码如下:
if(u.getUserTag().equals("userRegister")){
if(dao.register(u.getUserId(),u.getPwd(),u.getUserName())){
m.setMesType("registerSuccess");
}
else
m.setMesType("registerFail");
oos.writeObject(m);
//写入消息
socket.close();
}
接收到客户端User后判断为修改密码标志时,则通过UserDao类中的getPwdById()方法判断MYSQL数据库中是否有此用户,有则通过dao.changPwd(u.getUserId(),u.getNewPwd())更新用户密码,并把Massage的类型设为成功修改密码标志,通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket;反之把Massage的类型设为修改密码失败标志,通过oos.writeObject()把此消息发给客户端。
发完后关闭在服务器端的此用户连接的Socket。
关键代码如下:
if(u.getPwd().equals(dao.getPwdById(u.getUserId()))){
dao.changPwd(u.getUserId(),u.getNewPwd());
m.setMesType("changePwdSuccess");
m.setCon(u.getUserId());
}
else
m.setMesType("changePwdFail");
oos.writeObject(m);
socket.close();
按下jButton_stop时,跳出是否关闭服务器对话框。
点击确定时显示服务器已关闭对话框。
并通过notifyAllUserServerDown()通知所有在线用户服务器已关闭。
通知所有在线用户的代码如下:
publicvoidnotifyAllUserServerDown(){
//得到所有在线的人的线程
HashMap
ManageClientThread.store_SerConCl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JAVA 套接 多点 互动 通讯 毕业设计