cs模式聊天系统说明书
系统说明书
1.开发环境及工具
1.1 本系统所用的工具:
建议采用jdk1.4.2;服务器端:(Windows平台)首先应有java环境jdk,
Eclipse。
客户端: java环境jdk,建议jdk1.42;Eclipse。
1.2 本系统运行所需用到的环境为:
软件配置:WINDOWS XP 版本、All-In-One-Eclipse-311、j2sdk-1.42等。 2.小组分工
刘振兴:服务器程序模块
杨要奇:客户聊天主程序模块
宋孜铭:注册程序模块
苏建华:音乐播放程序模块
肖 爽:登录程序模块
3.本聊天室包括服务器和客户端两个部分:
服务器具有管理日志,监视聊天室的聊天内容,发送系统消息,和消息中转等功能。
客户端具有登录,注册用户,多种方式的聊天,发送文本文件和播放音乐等功能。
4.具体的使用说明如下:
4.1服务器端:运行服务器程序
4.2客户端:
(1)进登陆界面,第一次登陆需要注册,点注册按扭。
(2)按要求填完注册信息。
(3)返回登陆窗口,输入用户名、密码,进行登陆。
(4)进入聊天室。
进入聊天室后,就可以尽情的聊天了,可以和你喜欢的人私聊了,聊的开 心话题还可以进行保存,当然,你也可以清屏。
5、系统的功能模块划分及
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
原理
当用户聊天时,将当前用户名、聊天对象、聊天内容和是否私聊进行封装并且序列化,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是1秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为1秒最佳,因为每个用户都不可能在1秒内连续发送信息。当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化显示在聊天信息界面上。
5.1服务器程序模块(AppServer.java)
客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8000,然后无限循环调用accept()方法接受客户程序的连接。
服务器具有如下功能:
(1)启动服务,建立侦听,接受客户端连接。
(2)从流中读取经过序列化的对象。
(3)分析读取的对象进行相应的操作(登录信息的验证反馈、注册信息的验证和反馈、转发聊天信息等)。
消息。 (4)向客户端发送系统
(5)保存日志
(6)关闭服务,并向客户端发送服务器关闭消息。
服务器程序模块源码:
ServerSocket serverSocket; //服务器套接字
static Vector u=new Vector(1,1); //初始聊天用户对象集 static Vector v=new Vector(1,1); //初始聊天信息对象集 public void run()
{ Try
//无限循环实现多线程,实现与多个用户的同时连接
while(true)
{
//监听并接受客户的请求
Socket client = serverSocket.accept();
//继承Thread 支持多线程
new Connection(client,u,v);
}}
catch(IOException e)
{fail(e,"不能监听~");}
}
当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。
5.2登录程序模块(Login.java)
是客户端程序登录界面,负责用户帐号信息的验证与接收服务器的反馈。客户端请求连接,服务器的accept()方法建立与客户端的套接字连接。客户端将登录信息封装成Customer对象通过输出流发送服务器,等待服务器的验证,服务器反馈验证信息,客户端根据反馈信息进行登录和登录信息错误处理。 关键代码如下:
try
{
//连接到服务器
Socket toServer;
toServer = new Socket(strServerIp,1001);
//写客户详细资料到服务器socket
ObjectOutputStream streamToServer=new ObjectOutputStream
(toServer.getOutputStream());
streamToServer.writeObject((Customer)data);
//读来自服务器socket的登录状态
BufferedReader fromServer=new BufferedReader(new InputStreamReader(toServer.getInputStream())); String status=fromServer.readLine();
}
5.3注册程序模块(Register.java)
为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。注册模块
的原理跟登录模块基本相同。注册信息封装成Register_Customer对象,但服务
器只验证用户名,且只要求用户名不重复,服务器检验注册信息文件中的用户名,若不重复则反馈注册成功的信息。其他的注册信息(密码、年龄、邮箱)合法性
都交给注册模块自己完成。
5.4客户聊天主程序模块(ChatRoom.java)
客户通过Socket(InetAddress,port)建立与服务器的连接。客户端通过构
造ObjectInputstream,ObjectOutputstream与服务器建立输入输出流,然后双
方通过该输入输出流来相互传递信息,服务器一旦收到客户方的连接请求,服务
器accept()方法返回一个新建的Socket对象。客户端接受服务器传来的聊天信
息进行处理后显示在自己的聊天纪录中。同样客户端要发送文件和信息时也向服
务器发送请求,服务器同样通过accept()方法返回一个Socket对象,客户端就
可也进行相应的操作。
聊天客户端必须具有以下功能。
(1)连接服务器,发送用户登陆请求。
(2)向服务器发送聊天信息。
(3)接收服务器转发的了信息。
(4)接受服务器发送的系统消息。
关键源码如下:
public void run() {
try {
while (true)
{
Socket toServer;
toServer = new Socket(strServerIp, 1001);
// 将信息发往服务器
Message messobj = new Message();
ObjectOutputStream streamtoserver = new ObjectOutputStream(
toServer.getOutputStream());
streamtoserver.writeObject((Message) messobj);
// 收来自服务器的信息
ObjectInputStream streamfromserver = new
ObjectInputStream(
toServer.getInputStream()); toServer.getInputStream());
messobj = (Message) streamfromserve} 6.课程设计心得
本次课程设计能够成功,离不开老师的亲切指导,离不开队友的积极配合,离不开大家的热情帮助,离不开诸位的共同努力~感谢诸位~