刘延春论文正文.docx
- 文档编号:5018476
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:43
- 大小:194.29KB
刘延春论文正文.docx
《刘延春论文正文.docx》由会员分享,可在线阅读,更多相关《刘延春论文正文.docx(43页珍藏版)》请在冰豆网上搜索。
刘延春论文正文
目录
一、开发环境3
(一)开发语言的选择3
(二)开发工具的选择4
二、项目概况5
(一)服务器端的主要功能5
(二)客户端的主要功能6
(三)套接字通信6
三、概要设计7
(一)聊天室服务器端设计7
(二)聊天室客户端设计7
(三)UML模型图8
(四)主要算法分析8
四、详细设计8
1.服务器端和客服端的界面设计8
2.服务器端和客服端的功能设计11
3.服务器界面代码实现如下:
18
4.服务端和客服端收发消息的类21
5.客服端登陆类代码实现如下27
6.客服端类代码实现如下30
7.发送消息实体类代码实现如下40
论文摘要
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
[1]
基于Java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。
这款聊天室是套接字通信开发采用c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
本文分为4个部分,第一部分介绍了开发工具的选择以及开发环境的搭建,第一部分介绍了项目实现的功能和基本方法,第三部分是系统概要设计和第四部分详细设计。
关键词:
JAVA聊天室、c/s模式
Abstract
ThedevelopmentofHandsetVideoPlayerisbasedontheJ2MEandusestheEclipseremovabledevelopmentpackagetool.ThisHandsetVideoPlayerhasusedtheMIDP2.0oftheJ2MEwhichprovidesvideoconnectionMMAPI(MobileMediaAPI)thatcanbroadcastandtranscribeaudiotobroadcastvideowhoseformatismpg,wmvandsoon.
Thispaperisdividedintofourparts,thefirstdescribesthechoiceofdevelopmenttoolsanddevelopmentenvironmenttobuildthefirstsectionoftheprojecttoachievethefunctionsandbasicmethods,thethirdpartisthefourthpartofthesystemoutlinedesignanddetaileddesign
Keyword:
JAVAchatrooms、c/smode
一个小型的java聊天系统
福建师范大学网络教育学院刘延春
随着网络信息时代的来临,INTERNET应用越来越广泛,人们越来越习惯于在网上获取和交流信息。
据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天。
使用网上聊天已经成为现代年轻人一种新的交往方式。
[3]
根据网上调查,在所有参加网上聊天的大学生中,进聊天室进行聊天的占69.65%,使用网络寻呼机进行聊天的占37.93%,还有2.75%的受访者声称自己使用其他方式进行聊天。
进聊天室聊天是一种较为公共的聊天方式,而使用网络寻呼机则是一种具有排他性的聊天方式,一般能够用网络寻呼机进行联络的,都是比较熟悉的网友。
使用网络寻呼机还意味着使用者希望自己的网友随时与自己联系,表现出一种开放性的网上交际观念。
聊天室更适合于陌生人之间进行较为主观、感兴化的讨论。
所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。
作为一个信息技术专业的学生,经过几年大学知识的系统学习,应该对计算机科学与技术这个名词有了一定的认识。
在这几年里,我对本专业学习也有了长足的进步,在毕业即临时,我就选择了自己感兴趣的基于API的聊天室这个课题作为我的毕业设计及论文写作,以检验几年来的学习情况。
一、开发环境
聊天室的发展呈现万花筒般的发展,开发工具可以asp,php,cgi,vc++,c#,java等等,做出的聊天室各有千秋,本人以java为开发语言,对聊天室进行开发。
(一)开发语言的选择
相信熟悉Java演进历史的人或多或少都听说过,Java技术一开始并非就叫做Java,而是叫做OAK,而且最早的时候就是为了嵌入式系统而设计的一项产品。
后来因为网际网路的发达,而OAK的诸多特性刚好又适合用在网路上(例如可移植性、编译后程序码很小),因为商标已被注册的关系,因此OAK被改名成Java,从此因缘际会地成了网路上的闪亮巨星,并随著时间越来越成熟,也慢慢地产生了许多非原本预期中的相关运用。
[2]虽然Java已经被用到许多企业级软件上,可是其实骨子里面还是非常适合用在嵌入式系统之中。
从Java1.0发表之后,Java就被广泛地使用在桌上型应用程序以及Applet的开发上,但是,从Java1.1开始,Java又回到了它一开始的老路--也就是嵌入式系统方面的应用,在当时SunMicrosystems发表了EmbeddedJava与PersonalJava(也有人简称为PJava)这两项规格。
其中EmbeddedJava是为了资源十分有限,而且没有显示设备的嵌入式装置而设计;PersonalJava则是为了在能够与网际网路连线、并拥有显示系统(例如彩色LCD)的消费性电子装置而设计。
接着Java的版本演进到Java2,这时为了再明显区分各种Java的应用,所以分割出了J2EE、J2SE、以及J2ME三种版本。
所有JAVA版本与其所依据的虚拟器所堆积起来的结构如图1.1所示。
[2]
(二)开发工具的选择
操作系统:
linux
开发工具:
JDK1.6
Eclipse、Eclipseme插件
1.关于JDK1.6
JDK是Sun公司分发的免费Java开发工具,JavaSDK最早叫JavaSoftwareDevelopKit,后来改名为JDK,即JavaDevelopKit。
JDK作为Java开发工具包,主要用于构建在Java平台上运行的应用程序、Applet和组件等[5]。
2.JAVA开发环境的建立
为了能够编写并运行我们所编写的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,变量值:
“C:
\j2sdk1.4.2_07;C:
\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]。
(5)安装Eclipse插件,并进行相应的配置。
二、项目概况
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
(一)服务器端的主要功能
1.在特定端口上进行侦听,等待客户端连接
2.用户可以配置服务器的侦听端口,默认是5566
3.可以向已经连接的客户端发送体统消息
4.统计在线人数
5.停止服务时,断开所有的用户连接
(二)客户端的主要功能
1.连接到已经开启聊天服务的服务端
2.用户可以配置要连接的服务器IP地址和端口号
3.用户可以配置连接后的用户名
4.服务器开启时,用户可以随时登录与注消
5.用户可以想所有的人或者指定的个人发送消息
(三)套接字通信
套接字通信(socket)是网络的基本通信单元,又称为端口,通常用来实现客户方和服务方的连接。
网络上的两个程序通过双向的连接实现数据的交换,实现双方通信前链路的每一端都建立一个socket,通过对socket的读写操作实现网络的通信功能。
socket通信的过程主要有:
创建socket,打开连接到socket的输入流和输出流,按照一定的协议对socket进行读写操作,关闭socket这四个步骤,通过这个四个步骤可以完成一般的socket通信。
为了完成socket通信,包中提供了socket和serverSocket这两个类,它们分别用来表示双向连接的客户端和服务器断,它们的构造函数有:
[3]
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]
三、概要设计
本系统是java基于c/s模式的聊天室程序。
聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才能实现正常的聊天功能。
服务器端的程序
客户端的程序
设置IP与端口号
IP:
192.168.5.72
IP:
192.168.5.72
端口号:
5566
端口号:
5566
(一)聊天室服务器端设计
1.图形界面的设计事件处理
调用java.swing和java.awt包进行图形界面处理和java.swing.event与java.awt.event事件的侦听处理
2.实现服务器消息的收发
分别定义向所有用户或某一个用户发送消息的方法
3.定义用户的管理
定义添加用户,删除用户,返回用户数目,根据用户名查找用户,根据索引查找用户
4.设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息
(二)聊天室客户端设计
1.图形界面以及事件处理
调用java.swing和java.awt包进行图形界面处理和java.swing.event与java.awt.event事件的侦听处理
2.实现消息的收发
分别定义向所有用户或某一个用户发送消息的方法
3.侦听端口的修改配置
用户对所要连接的服务器IP及侦听端口进行修改配置
4.设计帮助文档
单击帮助按钮,弹出一对话框显示本系统的有关信息.为用户提供信息帮助。
(三)UML模型图
本系统用到的几个类,现设计如下。
用UML图来表示它们之间的关系。
(四)主要算法分析
1.登陆类(Login)
读取配置文件,获得主机地址和端口。
初始化登陆面板。
2.服务端类(Server)
服务器初始化,创建窗口。
创建服务器主线程,在主线程用HashMap来存ID和套接字,用LinkedHashMap来存ID和用户名字。
对每个socket的连接创建一个SocketThread线程
3.套接字线程类(SocketThread)
主要反应客服端的情况。
先初始化构造发送、接受对象流。
sendList方法中判断用户上下线。
线程启动时先获得用户名字的包,再发用户映射表给客户端,接着解包,对包进行处理。
是发送文件还是发送聊天包。
聊天包在分是群聊还是私聊。
通过对PackClass类中的sendFile属性来判断是否是发送文件。
接着bool属性来判断是否是群聊还是私聊。
通过对Server类中的HashMap建立连接。
对其发送相应的数据包文件。
统计当前在线人数通过Server类中LinkedHashMap属性,进行迭代累加。
得到该值。
4.客户端类(Client)
客户端初始化,创建窗口。
一创建socket就通知服务器,得到服务器传过来ID和用户组的包,通过Server类中LinkedHashMap属性,进行迭代累加,统计在线人数和显示用户昵称。
发送消息的事件。
捕获事件源。
创建PackClass的数据包。
通过选中的列表来判断是否是群聊还是私聊。
通过写入流输出数据包。
接收线程。
处于一直监听的循环中。
得到输入流,对象转化PackClass类,通过getUp属性来知道上下线。
否者是聊天包。
在通过bool属性判断是否是群聊还是私聊分别把该数据添加到java.awt.ListlistRight,java.awt.ListlistDown在面板上显示。
5.数据包类(PackClass)
该类序列化,定义了一些数据包的数据属性。
实现对数据的封装。
服务器和客户端都实例化该类对象。
四、详细设计
该系统详细设计了页面和代码的功能:
1.服务器端和客服端的界面设计
界面设计在应用程序很重要。
造就一款成功的聊天室软件,抛开其他各种因素不谈,主菜单的设计非常重要,其关键是可用性。
界面的可用性是指高效、易用、易学、易记。
如果用户界面不友好,即使用户对其感兴趣,由于菜单的原因使缺乏人性化设置,用户也不会再使用这个软件。
一个友好的界面是非常关键的,界面设计必须在软件设计时就进行事件添加和事件侦听和事件处理。
调用serverlisten()来实现服务端用户上线和下线的侦听,调用serverReceive()来实现服务器的消息收发。
[6]
登陆的界面如下:
客服端登陆后的界面:
服务器端的界面如下:
2.服务器端和客服端的功能设计
客户器端之间通信的界面如下(飘雪对犀利哥说话):
点击发送后的消息界面(飘雪):
点击发送后的消息界面(犀利哥)
飘雪对所有人说话如下:
点击发送后的消息界面(飘雪)
点击发送后的消息界面(服务器)
点击发送后的消息界面(犀利哥)
3.服务器界面代码实现如下:
packagecom.socket;
importjava.awt.*;
importjavax.swing.*;
importjava.io.*;
import.*;
importjava.util.*;
importcom.socket.*;
publicclassServerextendsThread
{
/**
*参数
*/
HashMapmap=newHashMap();//存ID和套接字
LinkedHashMapmapId=newLinkedHashMap();//存ID和用户名字
JLabellabelUp;
intid=0;//用户ID
ServerSocketserversocket;
java.awt.ListlistRight;
java.awt.ListlistLeft;
publicServer()
{
//服务器初始化
try
{
serversocket=newServerSocket(5566);
System.out.println("服务器启动.....");
}catch(IOExceptione)
{
System.out.println("IO异常服务器启动失败");
}
}
/**
*创建窗口
*/
publicvoidcreateForm()
{
JFrameframe=newJFrame("JAVA聊天服务器");
Containercontent=frame.getContentPane();
content.setLayout(newBorderLayout());
JPanelpanelLeft=newJPanel(newBorderLayout());
JPanelpanelRight=newJPanel(newBorderLayout());
JPanelpanelUp=newJPanel(newGridLayout(1,1));
JPanelpanelDown=newJPanel(newGridLayout(1,1));
panelLeft.setSize(350,600);
JSplitPanejsp=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight);
labelUp=newJLabel("当前在线人数(0)");
jsp.setDividerSize
(2);
jsp.setDividerLocation(200);
listLeft=newjava.awt.List();
listRight=newjava.awt.List();
panelLeft.add("North",labelUp);
panelLeft.add("Center",listLeft);
panelUp.add(listRight);
//可拖拉的条
JSplitPanejsp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,panelUp,panelDown);
jsp2.setDividerSize
(2);
jsp2.setDividerLocation(350);//设置位置
panelRight.add(jsp2);
content.add(jsp);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setLocation(100,100);
frame.setSize(800,600);
frame.setVisible(true);
}
//创建服务器主线程
publicvoidrun()
{
mapId.put("0","所有人");
while(true)
{
try
{
Socketsocket=serversocket.accept();
map.put(++id+"",socket);
newSocketThread(this,socket,id);
}catch(IOExceptione)
{
System.out.println("IO异常客户端连入失败");
}
}
}
publicstaticvoidmain(String[]args)
{
Servers=newServer();
s.createForm();
s.start();
}
}
4.服务端和客服端收发消息的类
packagecom.socket;
importjava.awt.*;
importjavax.swing.*;
importjava.io.*;
import.*;
importjava.util.*;
importcom.socket.*;
publicclassSocketThreadextendsThread
{
Servers;
Socketsocket;//本线程套接字
SocketsocketSend;//发送线程的套接字
Stringid;
Stringname;
Objectk;
ObjectInputStreamois;
ObjectOutputStreamoos;
ObjectOutputStreamoosSend;//发送线程OOS
PackClasspackSend;
PackClasspackRec;
publicSocketThread(Servers,Socketsocket,intid)//构造方法
{
//初始化
this.s=s;
this.socket=socket;
this.id=id+"";
this.initia();
this.start();
}
publicvoidinitia()/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 刘延春 论文 正文