网络与通信 聊天室 课程设计报告.docx
- 文档编号:11303582
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:27
- 大小:366.92KB
网络与通信 聊天室 课程设计报告.docx
《网络与通信 聊天室 课程设计报告.docx》由会员分享,可在线阅读,更多相关《网络与通信 聊天室 课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
网络与通信聊天室课程设计报告
中南大学
《网络与通信》
课程设计报告
设计报告题目:
网络聊天
学院:
信息科学与工程学院
专业:
电子信息0802
姓名:
王昊
学号:
0909080925
指导教师:
邓晓衡
完成时间:
2011年7月15日
目录
一、前言............................................3
二、课程设计题目及要求..............................3
三、实验通信原理....................................4
四、功能模块描述....................................6
五、实验部分主要程序................................6
六、实验程序截图....................................9
七、关键部分源码....................................13
八、问题及解决方案..................................22
九、心得体会与总结..................................22
一.前言:
随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:
信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。
因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。
因此出现了QQ等聊天工具,然而QQ等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。
目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且,它们中大部分都是绝对的C/S模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。
为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。
避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。
因此,这个软件是极具适应性和实用性的即时通讯软件。
2.课程设计题目及要求:
网络聊天
任务:
实现网络聊天的功能,采用WindowsSocket(或JavaSocket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。
服务器端要保存用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库。
在客户端可采用文件系统保存聊天纪录和用户号码。
可通过闪动托盘图标和播放不同的音乐提示信息到来及好友上线等信息。
可通过建立消息链表来保存用户接收的各种消息。
功能要求:
(1)登录功能。
(2)客户可以通过服务器转发,实现一对一和多对多聊天。
(3)实现呼叫功能。
(4)客户端程序应该可以实时显示目前其它用户的状态。
(5)应该具有易用、美观的图形界面。
客户端功能划分:
(1)登陆功能:
建立与服务器的连接并登陆,能显示登陆错误信息。
(2)界面显示:
将在线好友显示在好友列表中,并实现系统托盘,加入工具栏便于操作。
(3)聊天功能:
与好友聊天。
(4)聊天纪录:
能保存聊天纪录,并能察看聊天纪录。
(5)信息提示:
闪动托盘图标提示到来信息,并播放不同音乐来提示。
(6)其他:
用户登陆成功,将保存其号码,以便下次登陆时,不必再输入而可以直接选择,显示登陆时间。
可行性分析:
本系统是一个类似QQ的网络聊天室系统,现有的技术以较为成熟。
硬件、软件的性能要求、环境条件等各项条件良好,利用现有技术条件应完全可以达到该系统的功能目标。
技术实现如下:
CS模式:
Java(多线程,Socket,Swing组件技术)+XML文档解析技术
三.实验通信原理:
总的设计思想是利用java里的套接字Socket和ServerSocket(客户/服务器)来建立进程之间的通信
套接字工作原理:
要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:
服务器监听,客户端请求,连接确认。
【所谓服务器监听】是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
【所谓客户端请求】是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
【所谓连接确认】是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
Javasocket编程原理
1,什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。
Socket通常用来实现客户方和服务方的连接。
Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。
在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
2,Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。
一个连接就建立起来了。
Server端和Client端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1)创建Socket;
(2)打开连接到Socket的输入/出流;
(3)按照一定的协议对Socket进行读/写操作;
(4)关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影
3,怎么创建Socket
创建Socket
java在包中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。
这是两个封装得非常好的类,使用很方便。
其构造方法如下:
Socket(InetAddressaddress,intport);
Socket(InetAddressaddress,intport,booleanstream);
Socket(Stringhost,intprot);
Socket(Stringhost,intprot,booleanstream);
Socket(SocketImplimpl)
Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)
Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)
ServerSocket(intport);
ServerSocket(intport,intbacklog);
ServerSocket(intport,intbacklog,InetAddressbindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。
count则表示服务端所能支持的最大连接数。
例如:
Socketclient=newSocket("127.0.01.",80);
ServerSocketserver=newServerSocket(80);
注意,在选择端口时,必须小心。
每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。
0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23,所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。
所以在创建Socket或ServerSocket是必须捕获或抛出例外。
TCP/IP协议参考模型:
TCP/IP实际上一个一起工作的通信家族,为网际数据通信提供通路。
为讨论方便可将TCP/IP协议组大体上分为三部分:
1.网络层:
包括Internet协议(IP)、网际控制报文协议(ICMP)和地址识别协议(ARP).
2.传输层:
传输控制协议(TCP)和用户数据报文协议(UDP)
3.应用层:
处于TCP和UDP之上的一组协议专门开发的应用程序。
它们包括:
TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等许多协议。
TCP/IP使用了主干网络,能连接各种主机和LAN的多级分层结构,局部用户能方便的联网,不致影响到整个网络系统。
此外这种结构还有利于局部用户控制操作和管理。
TCP/IP具有两个主要功能。
第一是IP在网络之间(有时在个别网络内部)提供路由选择。
第二是TCP将TP传递的数据传送到接收主机那的适当的处理部件。
四.功能模块描述:
(1)用户登录:
用户根据自己的注册信息进行登录,只需要输入用户账号和密码,如果输入正确,服务器会发出登录成功,如果失败,会根据不同情况进行处理。
(2)用户私聊:
用户之间通过共同的服务器进行通信私聊,实现了一对一聊天。
(3)聊天室群聊功能:
用户A可以在聊天室中对其余所有人说话
(4)服务器开启与关闭:
根据TCPSOCKET管理通信,服务器开启监听用户请求链接,若服务器关闭则用户不能登录。
(5)保存/查看聊天记录:
使用文件I/O操作,根据不同的客户ID,产生相应的文件(文件名为客户ID号)来保存记录。
(6)好友状态实时显示:
利用客户端守护线程实时监控好友状态,守护线程每间隔10秒向服务器端发送请求,服务端返回当前在线的用户状态信息给客户端,若当前在线的用户状态信息有变,则客户端根据服务器端的返回信息更新好友状态。
(7)服务器对客户终端实时监控:
只监听在线用户
(8)用户终端登录记录(ID/Time):
利用xml文档解析技术,记录用户的ID和操作时间。
(9)时间查看:
程序带有时钟查看功能,可看到聊天时的时间。
五.实验部分主要程序:
(服务器界面,可以实现用户信息管理及基本信息的显示功能。
包含:
服务器当前状态,在线人数,服务器IP等信息。
用户信息,包含:
用户成员,在线信息,消息记录等信息。
)
1、服务器主要程序:
(只包含原理主要部分)
importjava.io.*;
import.*;
importjava.util.*;
*Title:
HappyChat聊天系统服务器程序
*Description:
聊天服务器
*Copyright:
Copyright(c)2006
*Filename:
AppServer.java
*创建服务器
*@author
*@version1.0
publicclassAppServerextendsThread{
privateServerSocketserverSocket;
privateServerFramesFrame;
privatestaticVectoruserOnline=newVector(1,1);
privatestaticVectorv=newVector(1,1);
创建服务器启动服务监听1001端口
publicAppServer(){
sFrame=newServerFrame();
try{
serverSocket=newServerSocket(1001);
//获取服务器的主机名和IP地址
InetAddressaddress=InetAddress.getLocalHost();
sFrame.txtServerName.setText(address.getHostName());
sFrame.txtIP.setText(address.getHostAddress());
sFrame.txtPort.setText("1001");
}catch(IOExceptione){
fail(e,"不能启动服务!
");
}
sFrame.txtStatus.setText("已启动...");
this.start();//启动线程
}
/*退出服务器
*@parame
*@paramstr
*退出信息
publicstaticvoidfail(Exceptione,Stringstr){
System.out.println(str+"。
"+e);
}/*监听客户的请求,当有用户请求时创建Connection线程
publicvoidrun(){
try{
while(true){
//监听并接受客户的请求
Socketclient=serverSocket.accept();
newConnection(sFrame,client,userOnline,v);//支持多线程
//System.out.println("userLength:
"+userLength);
}
}catch(IOExceptione){
fail(e,"不能监听!
");
}
}/**启动服务器
publicstaticvoidmain(Stringargs[]){
newAppServer();
}
}
2、客户端主要程序:
(只包含原理主要部分)
importjava.io.*;
import.*;
publicclassTalkClient{
publicstaticvoidmain(Stringargs[]){
try{
Socketsocket=newSocket("127.0.0.1",1001);
//向本机的1001端口发出客户请求
BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
PrintWriteros=newPrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));
//由Socket对象得到输入流,并构造相应的BufferedReader对象
Stringreadline;
readline=sin.readLine();//从系统标准输入读入一字符串
while(!
readline.equals("bye")){
//若从标准输入读入的字符串为"bye"则停止循环
os.println(readline);
//将从系统标准输入读入的字符串输出到Server
os.flush();
//刷新输出流,使Server马上收到该字符串
System.out.println("Client:
"+readline);
//在系统标准输出上打印读入的字符串
System.out.println("Server:
"+is.readLine());
//从Server读入一字符串,并打印到标准输出上
readline=sin.readLine();//从系统标准输入读入一字符串
}//继续循环
os.close();//关闭Socket输出流
is.close();//关闭Socket输入流
socket.close();//关闭Socket
}catch(Exceptione){
System.out.println("Error"+e);//出错,则打印出错信息
}
}
}
客户端功能说明:
1,可以实现一对一聊天,也可以实现一对多聊天。
2,可以发送系统消息,和保存消息记录。
3,可以实现字体的调整和表情的发送。
4,可以实现观看人数等基本信息。
3、用户注册功能:
(只提供实验结果集功能说明,源码在另一个文件夹中)
功能说明:
1实现用户基本信息的录制和注册功能
2可以判别信息是否录制正确。
3将信息保存至服务器中。
4、时钟显示及登陆(只提供实验结果集功能说明,源码在另一个文件夹中)
功能说明:
实现时钟显示的功能及登陆功能
六.实验程序截图:
1.用户注册界面(用户首次运行程序需要先注册)
2.开启服务器(监听)
3.用户登录程序(用户名+口令)
此处实验调试需登录两个用户(wh和wh2)
4.登录成功后聊天室主界面
如图所示,wh用户对wh2用户发言聊天中的程序运行显示。
Wh对wh2说你好,wh中显示你对wh2说‘******’,wh2中显示wh对你说‘******’。
此时服务器更新并显示了用户的登录信息以示管理所用。
5.改变字体颜色大小等属性后采用私聊方式聊天(悄悄话)
此处,wh对wh2采用私聊方式对话,信息只在wh和wh2间传递,wh3(其他所有用户)均在界面中看不到私聊的信息。
时钟信息截图
七.关键部分源码:
服务器程序:
importjava.io.*;
import.*;
importjava.util.*;
*
*Title:
HappyChat聊天系统服务器程序
*
*
*Description:
聊天服务器
*
*
*Copyright:
Copyright(c)2006
*
*
*Filename:
AppServer.java
*
*创建服务器
*
*@author
*@version1.0
*
*/
publicclassAppServerextendsThread{
privateServerSocketserverSocket;
privateServerFramesFrame;
privatestaticVectoruserOnline=newVector(1,1);
privatestaticVectorv=newVector(1,1);
/**
*创建服务器启动服务监听1001端口
*
*/
publicAppServer(){
sFrame=newServerFrame();
try{
serverSocket=newServerSocket(1001);
//获取服务器的主机名和IP地址
InetAddressaddress=InetAddress.getLocalHost();
sFrame.txtServerName.setText(address.getHostName());
sFrame.txtIP.setText(address.getHostAddress());
sFrame.txtPort.setText("1001");
}catch(IOExceptione){
fail(e,"不能启动服务!
");
}
sFrame.txtStatus.setText("已启动...");
this.start();//启动线程
}
/**
*退出服务器
*
*@parame
*异常
*@paramstr
*退出信息
*/
publicstaticvoidfail(Exceptione,Stringstr){
System.out.println(str+"。
"+e);
}
/**
*监听客户的请求,当有用户请求时创建Connection线程
*/
publicvoidrun(){
try{
while(true){
//监听并接受客户的请求
Socketclient=serverSocket.accept();
newConnection(sFrame,client,userOnline,v);//支持多线程
//System.out.println("userLength:
"+userLength);
}
}catch(IOExceptione){
fail(e,"不能监听!
");
}
}
publicstaticvoidmain(Stringargs[]){
newAppServer();
}
}
登陆源码:
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络与通信 聊天室 课程设计报告 网络 通信 课程设计 报告