java聊天室论文Word下载.docx
《java聊天室论文Word下载.docx》由会员分享,可在线阅读,更多相关《java聊天室论文Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
5.15设计帮助文档23
5.2服务器端的设计26
5.21.客户端的界面设计27
5.22实现客户端的收发消息28
5.33端口的配置34
5.44用户名登录的修改37
5.55帮助文档39
6.本章小结40
参考文献42
结束语36
致谢37
摘要
摘要
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
基于Java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。
这款聊天室是套接字通信开发采用c/s模式的聊天室程序。
本文分为七个部分,第一章详细介绍了J2ME的发展历史以及MIDP程序的基本框架生命周期以及手机多媒体的发展,第二部分介绍了开发工具的选择以及开发环境的搭建,第三到第五部分是系统的设计过程包括需求分析,系统的概要设计和详细设计,第六部分是系统测试与发布。
关键词:
JAVA聊天室
Abstract
ThedevelopmentofHandsetVideoPlayerisbasedontheJ2MEandusestheEclipseremovabledevelopmentpackagetool.ThisHandsetVideoPlayerhasusedtheMIDP2.0oftheJ2MEwhichprovidesvideoconnectionMMAPI(MobileMediaAPI)thatcanbroadcastandtranscribeaudiotobroadcastvideowhoseformatismpg,wmvandsoon.
Thisarticledividesintosevenparts,thefirstchapterdetailedintroducesthedevelopmenthistoryofJ2ME,theMIDPprocedurebasicbonelifecycleandthedevelopmentofhandsetmultimedia,thesecondpartintroducesthechooseofdevelopmenttoolandthebuildingofdevelopmentenvironment,fromthethirdparttothefifthpartisthedesignprocessofsystemwhichisincludethedemandanalysis,thesystemoutlinedesignandthedetaileddesign,thesixthpartisabouttestandtheissueofthesystem.
Keyword:
HandsetVideoPlayer;
J2ME;
MIDPprocedure
1.绪论.
1.1关于Java聊天室概述
1..1.选题的依据及课题的意义
随着网络信息时代的来临,INTERNET应用越来越广泛,人们越来越习惯于在网上获取和交流信息。
据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天。
使用网上聊天已经成为现代年轻人一种新的交往方式。
根据网上调查,在所有参加网上聊天的大学生中,进聊天室进行聊天的占69.65%,使用网络寻呼机进行聊天的占37.93%,还有2.75%的受访者声称自己使用其他方式进行聊天。
进聊天室聊天是一种较为公共的聊天方式,而使用网络寻呼机则是一种具有排他性的聊天方式,一般能够用网络寻呼机进行联络的,都是比较熟悉的网友。
使用网络寻呼机还意味着使用者希望自己的网友随时与自己联系,表现出一种开放性的网上交际观念。
聊天室更适合于陌生人之间进行较为主观、感兴化的讨论。
所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。
作为一个信息技术专业的学生,经过几年大学知识的系统学习,应该对计算机科学与技术这个名词有了一定的认识。
在这几年里,我对本专业学习也有了长足的进步,在毕业即临时,我就选择了自己感兴趣的基于API的聊天室这个课题作为我的毕业设计及论文写作,以检验几年来的学习情况。
1.2.开发语言的选择
聊天室的发展呈现万花筒般的发展,开发工具可以是asp,php,cgi,vc++,c#,java等等,做出的聊天室各有千秋,本人以java为开发语言,对聊天室进行开发。
相信熟悉Java演进历史的人或多或少都听说过,Java技术一开始并非就叫做Java,而是叫做OAK,而且最早的时候就是为了嵌入式系统而设计的一项产品。
后来因为网际网路的发达,而OAK的诸多特性刚好又适合用在网路上(例如可移植性、编译后程序码很小),因为商标已被注册的关系,因此OAK被改名成Java,从此因缘际会地成了网路上的闪亮巨星,并随著时间越来越成熟,也慢慢地产生了许多非原本预期中的相关运用。
虽然Java已经被用到许多企业级软件上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
从上图可以看到从Java1.0发表之后,Java就被广泛地使用在桌上型应用程序以及Applet的开发上,但是,从Java1.1开始,Java又回到了它一开始的老路--也就是嵌入式系统方面的应用,在当时SunMicrosystems发表了EmbeddedJava与PersonalJava(也有人简称为PJava)这两项规格。
其中EmbeddedJava是为了资源十分有限,而且没有显示设备的嵌入式装置而设计;
PersonalJava则是为了在能够与网际网路连线、并拥有显示系统(例如彩色LCD)的消费性电子装置而设计。
接着Java的版本演进到Java2,这时为了再明显区分各种Java的应用,所以分割出了J2EE、J2SE、以及J2ME三种版本。
所有JAVA版本与其所依据的虚拟器所堆积起来的结构如图1.1所示。
图1.1JAVA各版本结构
2.开发环境简介
2.1开发工具的选择
操作系统:
linux
开发工具:
JDK1.4
Eclipse、Eclipseme插件
2.2关于JDK1.4
.JDK是Sun公司分发的免费Java开发工具,JavaSDK最早叫JavaSoftwareDevelopKit,后来改名为JDK,即JavaDevelopKit。
JDK作为Java开发工具包,主要用于构建在Java平台上运行的应用程序、Applet和组件等。
2.3JAVA开发环境的建立
为了能够编写并运行我们所编写的JAVA程序,我们需要在自己的本地机器中安装JDK开发包,JDK是内置各种JAVA开发工具,JAVA虚拟机,JAVAAPI的一个压缩包。
(1)从下载J2SDK,最新的版本是1.4.2_08,下载后的JDK是个执行文件,我们运行后可直接安装,缺省的安装目录是C:
\j2sdk1.4.2_08。
(2)在电脑中配置环境变量,点右键打开我的电脑属性,在高级中有个环境变量,选择新建系统变量:
CLASSPATH,变量值:
“C:
\j2sdk1.4.2_07\lib\tools.jar;
C:
\j2sdk1.4.2_07\lib\dt.jar;
”,再新建变量名:
PATH,变量值:
\j2sdk1.4.2_07;
\j2sdk1.4.2_07\bin;
”。
具体设置如图2-3所示:
图2.1系统环境变量配置
(4)选择一个编译工具。
Eclipse是一款非常优秀的开源IDE,非常适合Java开发,由于支持插件技术,受到了越来越多的开发者的欢迎。
最新的Eclipse3.1不但界面做了很大的增强,而且增加了代码折叠等众多优秀功能,速度也有明显的提升。
配合众多另人眼花缭乱的插件,完全可以满足从企业级Java应用到手机终端Java游戏的开发。
本人选择了Eclipse作为这次毕业设计的工具,选择Eclipse作为开发的理由再简单不过了,占用资源少,JBuilder2005和SunONEStudio8.0ME建议标准内存1G以上,最低512M,目前国内个人电脑一般都达不到这个配置。
同时Eclipse目前基本为国内开发Java程序的标准的IDE,使用Eclipse将使手机程序开发更加简洁。
(5)安装Eclipse插件,并进行相应的配置[5]。
3.项目概况
3.1、功能简介
(1)服务器端的主要功能有:
a.在特定端口上进行侦听,等待客户端连接。
b.用户可以配置服务器的侦听端口,默认是8889。
c.可以向已经连接的客户端发送体统消息。
d.统计在线人数。
e.停止服务时,断开所有的用户连接。
(2)客户端的主要功能有:
a.连接到已经开启聊天服务的服务端。
b.用户可以配置要连接的服务器IP地址和端口号。
c.用户可以配置连接后的用户名。
d.服务器开启时,用户可以随时登录与注消。
c.用户可以想所有的人或者指定的个人发送消息。
3.2、套接字通信
套接字通信(socket)是网络的基本通信单元,又称为端口,通常用来实现客户方和服务方的连接。
网络上的两个程序通过双向的连接实现数据的交换,实现双方通信前链路的每一端都建立一个socket,通过对socket的读写操作实现网络的通信功能。
socket通信的过程主要有:
创建socket,打开连接到socket的输入流和输出流,按照一定的协议对socket进行读写操作,关闭socket这四个步骤,通过这个四个步骤可以完成一般的socket通信。
为了完成socket通信,包中提供了socket和serverSocket这两个类,它们分别用来表示双向连接的客户端和服务器断,它们的构造函数有:
Socket()
通过系统默认类型的SocketImpl创建未连接套接字
Socket(InetAddressaddress,intport)
创建一个流套接字并将其连接到指定IP地址的指定端口号。
Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)
创建一个套接字并将其连接到指定远程端口上的指定远程地址。
Socket(Proxyproxy)
根据不管其他设置如何都应使用的指定代理类型(如果有),创建一个未连接的套接字。
protectedSocket(SocketImplimpl)
创建带有用户指定的SocketImpl的未连接Socket。
Socket(Stringhost,intport)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。
其中端口号涉及到一个分配的问题,TCP/IP将端口号分成了两个部分,少量的作为保留端口,端口号小于256,以全局方式分配给服务进程。
因此每一个标准服务器都拥有一个全局公认的端口,即使在不同的机器上其端口号也是不同的。
对于常见的端口号主要有:
80端口提供www服务,23提供ftp服务,110提供pop服务。
剩余的为自由端口,
4.概要设计
服务器端的程序
客户端的程序
端口号:
8889
IP:
192.168.5.72
设置IP与端口号
端口号:
建立连接
4.1、聊天室服务器端设计。
(1)图形界面的设计事件处理。
调用java.swing和java.awt包进行图形界面处理和java.swing.event与java.awt.event事件的侦听处理。
(2)实现服务器消息的收发。
分别定义向所有用户或某一个用户发送消息的方法。
(3)定义用户的管理
定义添加用户,删除用户,返回用户数目,根据用户名查找用户,根据索引查找用户。
(4)设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息.
...........4.2聊天室客户端设计
(1)图形界面以及事件处理
(2)实现消息的收发
(3)侦听端口的修改配置
用户对所要连接的服务器IP及侦听端口进行修改配置
(4)设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息.为用户提供信息帮助。
5详细设计
5.1服务器端的设计
5.11.服务器端的界面设计
界面设计在应用程序很重要。
造就一款成功的聊天室软件,抛开其他各种因素不谈,主菜单的设计非常重要,其关键是可用性。
界面的可用性是指高效、易用、易学、易记。
如果用户界面不友好,即使用户对其感兴趣,由于菜单的原因使缺乏人性化设置,用户也不会再使用这个软件。
一个友好的界面是非常关键的,界面设计必须在软件设计时就进行事件添加和事件侦听和事件处理。
调用serverlisten()来实现服务端用户上线和下线的侦听,调用serverReceive()来实现服务器的消息收发。
服务器端的界面如下:
图1服务器端界面效果
服务器界面代码实现如下:
publicclassChatClientextendsJFrameimplementsActionListener{
Stringip="
192.168.5.72"
;
//连接到服务端的ip地址
intport=8888;
//连接到服务端的端口号
StringuserName="
梅山古道"
//用户名
inttype=0;
//0表示未连接,1表示已连接
Imageicon;
//程序图标
JComboBoxcombobox;
//选择发送消息的接受者
JTextAreamessageShow;
//客户端的信息显示
JScrollPanemessageScrollPane;
//信息显示的滚动条
JLabelexpress,sendToLabel,messageLabel;
JTextFieldclientMessage;
//客户端消息的发送
JCheckBoxcheckbox;
//悄悄话
JComboBoxactionlist;
//表情选择
JButtonclientMessageButton;
//发送消息
JTextFieldshowStatus;
//显示用户连接状态
Socketsocket;
ObjectOutputStreamoutput;
//网络套接字输出流
ObjectInputStreaminput;
//网络套接字输入流
ClientReceiverecvThread;
//建立菜单栏
JMenuBarjMenuBar=newJMenuBar();
//建立菜单组
JMenuoperateMenu=newJMenu("
操作(O)"
);
//建立菜单项
JMenuItemloginItem=newJMenuItem("
用户登录(I)"
JMenuItemlogoffItem=newJMenuItem("
用户注销(L)"
JMenuItemexitItem=newJMenuItem("
退出(X)"
JMenuconMenu=newJMenu("
设置(C)"
JMenuItemuserItem=newJMenuItem("
用户设置(U)"
JMenuItemconnectItem=newJMenuItem("
连接设置(C)"
JMenuhelpMenu=newJMenu("
帮助(H)"
JMenuItemhelpItem=newJMenuItem("
//建立工具栏
JToolBartoolBar=newJToolBar();
//建立工具栏中的按钮组件
JButtonloginButton;
//用户登录
JButtonlogoffButton;
//用户注销
JButtonuserButton;
//用户信息的设置
JButtonconnectButton;
//连接设置
JButtonexitButton;
//退出按钮
//框架的大小
DimensionfaceSize=newDimension(400,600);
JPaneldownPanel;
GridBagLayoutgirdBag;
GridBagConstraintsgirdBagCon;
publicChatClient(){
init();
//初始化程序
//添加框架的关闭事件处理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
//设置框架的大小
this.setSize(faceSize);
//设置运行时窗口的位置
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int)(screenSize.width-faceSize.getWidth())/2,
(int)(screenSize.height-faceSize.getHeight())/2);
this.setResizable(true);
this.setTitle("
聊天室客户端"
//设置标题
//程序图标
//icon=getImage("
/home/asd0709/lijie/jsp/liaotianshi/src/ChatServer/lily.gif"
//this.setIconImage(icon);
//设置程序图标
show();
//为操作菜单栏设置热键'
V'
operateMenu.setMnemonic('
O'
//为用户登录设置快捷键为ctrl+i
loginItem.setMnemonic('
I'
loginItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,InputEvent.CTRL_MASK));
//为用户注销快捷键为ctrl+l
logoffItem.setMnemonic('
L'
logoffItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
//为退出快捷键为ctrl+x
exitItem.setMnemonic('
X'
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
//为设置菜单栏设置热键'
C'
conMenu.setMnemonic('
//为用户设置设置快捷键为ctrl+u
userItem.setMnemonic('
U'
userItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
//为连接设置设置快捷键为ctrl+c
connectItem.setMnemonic('
connectItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
//为帮助菜单栏设置热键'
H'
helpMenu.setMnemonic('
//为帮助设置快捷键为ctrl+p
helpItem.setMnemonic('
helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK));
}
/**
*程序初始化函数
*/
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
//添加菜单栏
operateMenu.add(loginItem);
operateMenu.a