湖南农业大学课程设计论文.docx
《湖南农业大学课程设计论文.docx》由会员分享,可在线阅读,更多相关《湖南农业大学课程设计论文.docx(12页珍藏版)》请在冰豆网上搜索。
湖南农业大学课程设计论文
J2EE课程论文
学院:
东方科技学院
班级:
2011级计算机2班
姓名:
李方剑
学号:
5
课程论文题目:
B/S结构在线聊天系统的设计与实现
课程名称:
J2EE与中间件
指导老师:
乔波
六.示例展示11
B/S结构在线聊天系统的设计与实现
摘要:
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
基于java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。
这款聊天室是套接字通信开发采用c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端的程序主要负责侦听客户端发来的消息,客户端需要登录带服务器端才能实现正常的聊天功能。
关键字:
java聊天;
引言
目前许多的web应用程序都需要提供即时聊天系统,用来传递及时的消息,方便用户与其他用户之间交换信息。
这是一个有java开发的B/S模式的即时聊天系统,能实现两个用户或多个用户之间的即时聊天。
一·功能简介
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器才能实现正常的聊天功能。
(1)服务器端的主要功能有:
a.在特定端口上进行侦听,等待客户端连接。
b.用户可以配置服务器的侦听端口,默认是8889.
c.可以向已经连接的客户端发送体统消息。
d.统计在线人数。
e.停止服务时,断开所以的用户连接。
(2)客户端的主要功能有:
a.连要连接的服务器接到已经开启聊天服务的服务端。
b.用户可以配置要连接的服务器IP地址和端口号。
c.用户可以配置连接后的用户名。
d.服务器开启时,用户可以随时登录与注销。
e.用户可以想所以的人或者指定的个人发送消息。
二·开发环境简介
操作系统:
linux
开发工具:
JDK1.4
Eclipse、Eclipseme插件
三.套接字通信
套接字通信(socket)是网络的基本通信单元,又称为端口,通常用来实现客户和服务方的连接。
网络上的两个程序通过双向的连接实现数据的交换,实现双方通信钱链路的每一端都建立一个socket,通过对socket的读写操作实现网络的通信功能。
Socket通信的过程主要有:
创建socket,打开连接到socket的输入流和输出流,按照一定的协议对socket进行读写操作,关闭scoket这四个步骤,通过这个四个步骤可以完成一般的socket通信。
为了完成socket通信,包中提供了socket和serverSocket这两个类,它们分别用来表示双向连接的客户端和服务器端,它们的构造函数有:
Socket()
通过系统默认类型的SocketImpl创建未连接字
Socket(InetAddressaddress,intport)
创建一个流套接字并将其连接到指定IP地址的指定端口号。
Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalport)
创建一个套接字并将其连接到指定远程端口上的指定远程地址。
Socket(Proxyproxy)
根据不管其他设置如何都应使用的指定代理类型(如果有),创建一个未连接的套接字。
Socket(SocketImplimpl)
创建带有用户指定的SocketImpl的未连接Socket。
Socket(Stringhost,intport)
创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)
创建一个套接字并将其连接到指定远程主机上的指定远程端口。
其中端口号涉及到一个分配的问题,TCP/IP将端口号分成了两个部分,少量的作为保留端口,端口号小于256,以全局方式分配给服务进程。
因此每一个标准服务器都拥有一个全局公认的端口,即使在不同的机器上其端口号也是不同的。
对于常见的端口号主要有:
80端口提供www服务,23提供ftp服务,110提供pop服务。
剩余的为自由端口。
四、概要设计
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
服务器端的程序客户端的程序
建立连接
设置IP与端口号
IP:
192.168.5.72
端口号:
8889
IP:
192.168.5.72
端口号:
8889
4.1.聊天室服务器端设计。
(1)图形界面的设计事件处理。
调用java.swing和java.awt包进行图形界面处理和java.swing.event与java.awt.event事件的侦听处理。
(2)实现服务器消息的收发
分别定义向所有用户或某一个用户发送消息的方法。
(3)定义用户的管理
定义添加用户,删除用户,返回用户数目,根据用户名查找用户,根据索引查找用户。
(4)设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息。
4.2聊天室客户端设计
(1)图形界面以及事件处理
调用java.swing和java.awt包进行图形界面处理和java.swing.event与java.awt.event事件的侦听处理。
(2)实现消息的收发
分别定义向所以或某一个用户发送消息的方法。
(3)侦听端口的修改配置
用户对所要连接的服务器IP及侦听端口进行修改配置
(4)设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息,为用户提供信息帮助。
五.详细设计
5.1服务器端的设计
界面设计在应用程序很重要。
造就一款成功的聊天室软件,抛开其他各种因素不谈,主菜单的设计非常重要,其关键是可用性。
界面的可用性是指高效、易用、易学、易记。
如果用户界面不友好,即使用户对其感兴趣,由于菜单的原因使缺乏人性化设置,用户也不会再使用这个软件。
一个友好的界面是非常关键的,界面设计必须在软件设计时就进行事件添加和事件侦听和事件处理。
调用serverlisten()来实现服务器端用户上线和下线的侦听,调用serverReceive()来实现服务器的消息收发。
5.2实现服务器消息的收发
分别定义向所有用户或某一个用户发送消息的方法。
5.3用户侦听设计
主要函数调用该方法用于侦听用户的上线与下线,但必须调用userLinklist()来实现那的,用户在线情况发生变换时,该类会对主类的界面进行修改。
实现代码如下:
PublicclassServerListenextendsThread{
ServerSocketserver;
JComboBoxcombobox;
JTextAreatextarea;
UserLinkListuserLinkList;//用户链表
Nodeclient;
ServerReceiverecvThread;
PublicBooleanistop
/*
*聊天服务器端的用户上线与下线侦听类
*/
PublicServerListen(ServerSocketserver,JComboBox,JTextAreatextarea,JTextFieldtextfield,UserLinkListuserLinkList)
{
this.server=server;
bobox=combobox;
this.textarea=textarea;
this.textfield=textfield;
this.userLinkList=userLinkList;
isStop=false;
}
Publicvoidrun(){
While(!
isStop&&!
server.isClosed()){
Try{
Client=newNode();
Client.socket=server.accept();
Client.output=new
ObjectOutputStream(client.socket.getOutputStream());
Client.output.flush();
Client.input=new
ObjectInputStream(client.socket.getInoutStream());
Client.username=(string)client.input.readObject();
//显示提示信息
Combobox.addItem(client.username);
userLinkList.addUser(client);
textarea.append(“在线用户”+userLinkList.getCount()+”人\n”);
recThread.start();
}
Catch(Exceptione){
}
}
}
}
5.4定义用户的管理
定义添加用户,删除用户,返回用户数目,根据用户名查找用户,根据索引查找用户。
代码实现如下:
PublicclassUserLinkList{
Noderoot;
Nodepointer;
Intcount;
PublicUserLinkList(){
root=newNode();
root.next=null
pointer=null;
count=0;
}
publicvoidaddUser(Noden){
pointer=pointer.next;
}
Pointer.next=n;
n.next=null;
count++;
}
poblicvoiddelUser(Noden){
pointer=root;
while(pointer.next!
=null){
if(pointer.next==n){
pointer.next=n.next;
count--;
break;
}
Pointer=pointer.next;
}
}
publicintgetCount(){
returncount;
}
publicNodefindUser(Stringusername){
if(count==0)returnnull;
pointer=root;
while(pointer.next!
=null){
pointer=pointer.next;
if(pointer.username.equalsIgnoreCase(username)){
returnpointer;
}
}
Returnnull;
}
pulicNodefindUser(intindex){
if(count==0){
returnnull;
]
Pinter=root;
Inti=0;
while(iif(pointer.next!
=null){
pointer=pointer.next;
}
else{
returnnull;
}
i++;
}
returnpointer;
}
}
5.5设计帮组文档
单击帮助按钮,弹出一对话框显示系统的有关信息,为用户提供信息帮助。
代码实现如下:
publicclassHelpextendsJDialog{
JPaneltlePanel=newJPanel();
JPanelcontentPanel=newJPanel();
JPanelclosePanel=newJPanel();
JButtonclose=newJButton();
JLabeltitle=newJLabel(“聊天室服务器端帮助”);
JTextAreahelp=newJTextArea();
Colorbg=newColor(255,255,255);
publicHelp(JFrameframe){
supper(frame,true);
try{
jbInit();
}
catch(Exceptione){
e.printStackTrace();
}
DimensionscreenSize=
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((int)(screenSize.width–400)/2,(int)(sreenSize.height–320)/2);
this.setResizable(false);
}
privatevoidjbInit()throwsExcption{
this.setSize(newDimension(400,200));
this.setTitle(“帮助”);
titlePanel.setBackground(bg);
contentPanel.setBackground(bg);
closePanel.setBackground(bg);
help.stText(“1、设置服务器端的侦听端口(默认端口为8888)。
\n”+
“2、点击启动服务按钮便可在指定的端口启动服务。
\n”+
“3、选择需要接受消息的用户,在消息栏中写入消息,之后便可发送消息。
\n”+
“4、信息状态栏中显示服务器当前的启动与停止状态、”+
“用户发送的消息和\n服务器端发送的系统消息。
”);
help.setEditable(false);
titlePanel.add(newLabel(“”));
titlePanel.add(title);
closePanel.add(newLabel(“”));
ContainecontentPane=getContentPane();
contentPane.seatLayout(newBorderLayout());
contentPane.add(titlePanel,BorderLayout.CETER);
contentPane.add(contentPanel,BorderLayout.CENTER);
contentPane.add(clpsePanel,BorderLayout.SOUTH);
close.setText(“关闭”)
//事件处理
close.addActionListener(
newActionListener(){
publicvoidactionPerformed(ActionEvente){
dispose();
}
}
}
}
}
六.示例展示
七.参考文献
[1] 吕海东张坤《Java EE企业级应用开发实例教程》清华大学出版社2010.8
[2] 张蓓赵国锋《JSP数据库通用模块开发与系统移植》清华大学出版社2007.4
[3] 赫玉龙《J2EE编程技术》清华大学出版社
北京交通大学出版社2005.3
[4] Java程序设计实用教程(第3版)
电子工业出版社2010.2
[5] 数据库系统教程(第3版)高等教育出版社
2008.7