基于 TCP 协议的即时通信软件的设计与实现Word格式.docx
- 文档编号:22027981
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:32
- 大小:297.98KB
基于 TCP 协议的即时通信软件的设计与实现Word格式.docx
《基于 TCP 协议的即时通信软件的设计与实现Word格式.docx》由会员分享,可在线阅读,更多相关《基于 TCP 协议的即时通信软件的设计与实现Word格式.docx(32页珍藏版)》请在冰豆网上搜索。
TheDesignandImplementationofSimpleInstant
MessageSoftwareBasedonTCPProtocolAbstract
YiZhenkai
(CollegeofInformationScienceandEngineering,JishouUniversity,Jishou,Hunan416000)
Abstract
Instantmessageshaveseveraladvantagessuchasreal-time,cross-platform,cheapandefficient.TodesignaMulti-userIM(instantmessage)architectureisveryimportantinboththeoryandrealism.InstantmessagebasedonTCP/IPprotocolthatisrealizedbysocketinterface.AlmostallUNIXoperationsystemsandMicrosoft'
swindowsoperationsystemsprovidesupportofsocketinthekernel.Usingtheuniforminterface,wecandevelopaportableprogramofTCP/IP,whichhelpustransferinformationinInternetsafelyandcredibly.
Thesystemusestheclient/server(C/S)mode.Theservertakestheresponsibilityoftheloginmessageofclient,thesavingoffriendmessageandMessageheartbeat.ThetransmissionofthebasicmessagesofthecustomerendwillbedesignedonP2Parchitecture.ThisthesisexplainshowtheclientandservercommunicateviaserializingXMLmessage.
Keywords:
InstantMessage;
FileTransfer;
Socket;
TCPprotocol
目录
第一章引言1
1.1课题背景1
1.2国内外研究现状1
1.2.1国外研究现状1
1.2.2国内研究现状2
1.3课题研究的意义2
1.4课题的研究方法2
第二章相关技术介绍3
2.1TCP协议3
2.1.1TCP/IP网络协议3
2.1.2TCP——传输控制协议3
2.2套接字3
2.3流4
2.3.1流的基本概念4
2.3.2.NET中的流4
2.4同步、异步、阻塞和非阻塞4
2.5C/S模型5
2.6即时通信协议5
第三章系统总体设计7
3.1需求分析7
3.2系统基本架构7
3.3功能模块设计7
3.4逻辑图9
3.5数据库设计9
3.5.1实体关系图9
第四章系统实现11
4.1使用XML定义的即时通信协议11
4.1.1信息结构MESSAGE.CS&
UMESSAGE.CS11
4.1.2数据结构FriendStruct12
4.2数据库连接类14
4.3服务器端15
4.3.1同步套接字网络监听15
4.3.2多线程17
4.3.3计时器17
4.4.1同步套接字客户端18
4.4.2采用异步套接字的文件传输21
结论24
参考文献24
第一章引言
1.1课题背景
即时通信是一个终端连往一个即时通信网路的服务。
即时通信不同于e-mail在于它的交谈是实时的。
大部分的即时通信服务提供了presenceawareness的特性──显示联络人名单,联络人是否在在线与能否与联络人交谈。
最早的即时通信软件是ICQ,ICQ是英文中Iseekyou的谐音,意思是我找你。
四名以色列青年于1996年7月成立Mirabilis公司,并在11月份发布了最初的ICQ版本,在六个月内有85万用户注册使用。
在因特网上受欢迎的即时通信服务包含了MSNMessenger、AOLInstantMessenger、Yahoo!
Messenger、NETMessengerService、Jabber、ICQ与QQ。
这些服务有赖于许多想法更久的(与普遍)的在线聊天媒介,如InternetRelayChat一样知名。
1970年代早期,一种更早的即时通信形式是柏拉图系统(PLATOsystem)。
之后在1980年代,UNIX/Linux的交谈实时信息被广泛的使用于工程师与学术界,1990年代即时通信更跨越了因特网交流。
1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于因特网的即时通信软件。
在ICQ的介绍之后,同时在许多地方有一定数量的即时通信方式发展,且各式的即时通信程序有独立的协议,无法彼此互通。
这引导使用者同时执行两个以上的即时通信软件,或者他们可以使用支持多协议的终端软件,如Gaim、Trillian或Jabber。
近年来,许多即时通信服务开始提供视讯会议的功能,网络电话(VoIP),与网络会议服务开始整合为兼有影像会议与实时信息的功能。
于是,这些媒体的分别变的越来越模糊。
1.2国内外研究现状
1.2.1国外研究现状
当今,国际上对网络通信系统研究的较好的公司有,思科,Sun,Ms等公司,思科主要研究的是底层的传输;
MS,Sun公司研究的是应用层。
其中ms公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。
但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。
当然,ie,同样也不是很受人青睐,这让人想起了,当年的网景公司,网景只是生不逢时。
MS不择手段的想打跨网景,可见其对网络的重视。
如今,Sun公司在网络应用上捷足先登,凭借着Java,Sun在网络的应用上领先于MS。
微软,想用同样的办法搞跨对手,因此它拿出了Visualc#,来对抗Java。
这些都是在应用层面的开发工具。
应用层上的产品就更显种类繁多。
ICQ几乎是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。
msn,是MS的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。
至于ie,是在Visualc++下开发的产品,虽然有严重的安全隐患,不过,至少能在某种程度上代表当今国际研究的水平。
此外,国际上最近出先了新的浏览器Firefox,其性能据说是远高于ie,也许在网络的天下,Ms又有了更强劲的对手。
1.2.2国内研究现状
国内在应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏平台,还有其他的一些平台,这些平台基本上都是基于VC++的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。
所以效率上不错。
此外,tencent的即时通信,也是做的很好的,从某中程度上来说,代表了国内最高的水平。
1.3课题研究的意义
本课题目标是实现局域网用户之间的即时交流和文件传输,通过基础的网络SOKET编程,为局域网内部的即时通信提供一个简单而较安全的解决方案。
1.4课题的研究方法
本系统采用C/S(Client/Server)结构进行设计,使用SQLServer2000构建数据库,并在.NET环境下使用VisualC#.net语言和SOCKET套接字开发一个基于TCP协议的简单即时通信软件,实现简单的即时聊天,文件传输等功能。
第二章相关技术介绍
2.1TCP协议
2.1.1TCP/IP网络协议
协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。
网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。
相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:
面向连接的服务和无连接的服务。
计算机网络中已经形成的网络体系结构主要有两个:
OSI参考模型和TCP/IP参考模型。
TCP/IP参考模型是因特网(Internet)的基础。
和OSI的7层协议相比,TCP/IP协议只有4个层次。
通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(InternetProtocol,网际协议)是网络层最主要的协议;
TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。
2.1.2TCP——传输控制协议
面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。
TCP协议就使用这种可靠通信。
使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。
TCP要求在发送数据之前必须打开连接。
服务器应用程序必须执行一个称作被动打开(passiveopen)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。
客户应用程序必须执行一个主动打开(activeopen),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。
客户应用程序可以将动态端口号作为本地端口使用。
服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。
随后,客户回复一个ACK,这样就建立了链接。
现在可以发送和接收消息了。
接收消息后,总是返回ACK消息。
如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。
由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。
2.2套接字
套接字这个术语并没有定义某个协议:
它具有两层含义,但两者都与一个协议相关。
第一个含义是套接字编程API,它最初由伯克利大学为BSDUNIX而创建。
BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。
WinSockAPI被包装在System.Net.sockets命名空间的.NET类中。
WindowsSockets是一个独立于协议的编程接口,用于编写网络应用程序。
套接字的第二层含义表示一个用于在进程间进行通信的终端。
在TCP/IP中,每个终端都与一个IP地址和一个端口号绑定。
我们必须对流式套接字和数据报套接字这两种类型进行区分。
流失套接字用TCP/IP协议来使用面向连接的通信;
另一方面,数据报套接字用UDP/IP来使用无连接通信。
2.3流
2.3.1流的基本概念
流的概念已经存在很长时间了。
流是一个用于传输数据的对象。
数据的传输有两个方向:
1)如果数据从外部源传输到程序中,这就是读取流。
2)如果数据从程序传输到外部源,这就是写入流。
外部源常常是一个文件,但也不完全都是文件,它还可以是:
1)网络,使用一定的网络协议与网络上其它计算机或终端交换数据。
2)一个指定的管道。
3)一块内存区域。
2.3.2.NET中的流
在这些情况中,微软提供了一个.NET基类System.IO.MemoryStream来读写内存数据使用System.Net.Sockets.NetworkStream处理网络数据。
读写管道没有相应的流类,但有一个常见的流类System.IO.Stream,如果要编写一个这样的类,可以从这个基类继承。
流对外部数据源不做任何假定。
外部源还可以是代码中的一个变量,使用流在变量之间传输数据的技术是一个非常有用的技巧,可以在数据类型之间转换。
在网络编程中我们经常会使用到网络中的流对:
NetworkStream。
它实现了.NET中标准的Stream机制,即可以使NetworkStream通讯网络套接字用标准的流操作进行网络数据的读写。
它提供以下的功能:
1)一个统一的从网络中读取数据的方法;
2)与其他的.NET流兼容,这样你可以很容易地移植程序。
2.4同步、异步、阻塞和非阻塞
同步(synchronous):
所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。
异步(asynchronous):
异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。
阻塞(Block):
指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader类的Readlin()方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin()方法将一直挂在调用上,直到读到一些数据,此函数调用才返回。
非阻塞(Unblock)指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。
同样调用StreamReader类的Readlin()方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。
在Windows网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。
平常所说的C/S(客户端/服务器)结构的软件采用的方式就是异步非阻塞模式的。
其实在用C#进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非阻塞的原理和工作机制,因为在.NetFrameWrokSDK中已经已经把这些机制给封装好了。
2.5C/S模型
客户机/服务器模型,又称为Client/Server模型,简称C/S架构。
C/S计算技术在信息产业当中占有重要的地位。
这种客户机/服务器模型是一种非对称式编程模式。
该模式的基本思想是把集中在一起的应用划分成为功能不同的两个部分,分别在不同的计算机上运行,通过它们之间的分工合作来实现一个完整的功能。
对于这种模式而言其中一部分需要作为服务器,用来响应并为客户提供固定的服务;
另一部分则作为客户机程序用来向服务器提出请求或要求某种服务。
在此“服务器”是指能在网络上提供服务的任何程序。
服务器接受网络上的请求,完成服务后将结果返回给申请者。
对于简单的服务,把每个请求用一个IP数据报发给服务器,服务器用另一个数据报返回响应。
客户机和服务器都是独立的计算机。
当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。
而那些用于访问服务器资料的计算机则被叫做客户机。
严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。
采用这种结构的系统目前应用非常广泛。
如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。
各种网络服务器基本都遵循同样的算法:
创建一个端口(Port),接受从网络上来的客户服务请求,完成计算后把结果返回给客户,如此反复。
2.6即时通信协议
协议是一系列的步骤,它包括双方或者多方,设计它的目的是要完成一项任务。
即时通信协议,参与的双方或者多方是即时通信的实体。
协议必须是双方或者多方参与的,一方单独完成的就不算协议。
这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。
这些信息的格式必须是协议参与方同意并且遵循的。
好的协议要求清楚,完整,每一步都必须有明确的定义,并且不会引起误解;
对每种可能的情况必须规定具体的动作。
有许多的IM系统,如AOLIM、YahooIM和MSNIM,它们使用了不同的技术,而且它们互不兼容。
为了创建即时通信的统一标准,人们经过了多次尝试:
IETF的对话初始协议(SIP)和即时通信对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通信协议(PRIM)及基于XML且开放的可扩展通信和表示协议(XMPP)协议(常称为Jabber协议)。
人们多次努力,试图统一各大主要IM供应商的标准(AOL、Yahoo及Microsoft),但无一成功,且每一种IM仍然继续使用自己所拥有的协议。
本系统目的在于实现一个简单的即时通信过程,没有必要采用通用的比较复杂的即时通信协议,因此使用了简单定义的XML标记定义来规范即时通信的各种网络信息,在网络中传输序列化的XML语言。
第三章系统总体设计
3.1需求分析
软件针对局域网内部用户,实现用户间的即时通信。
需要分别实现服务器端和客户端的软件设计。
服务器端负责监听用户连接请求,负责连接数据库存储用户信息,负责发送给用户好友信息,负责发送心跳报文检查用户在线状态并即时让用户更新好友在新信息。
客户端发起主动连接,向服务器请求登录或者注册。
客户端可以修改昵称,可以加已知用户为好友(类似于MSN的好友添加功能)。
客户端之间可以发起P2P模式的聊天,可以传送文件。
3.2系统基本架构
基于C/S架构的即时通信软件便于对用户信息进行统一管理和保存,面向特定的用户,对信息的安全控制能力很强。
为了减轻服务器负担,客户端之间的信息传递是采用P2P模式的,服务器只负责用户的注册,登录和用户在线状态的检验。
基本结构如图:
注册和登录信息注册和登录信息
返回信息
聊天信息,文件传输
图1系统基本架构
3.3功能模块设计
CLIENT:
1.注册:
(1)可以完成客户端注册,客户端可以通过填写信息进行注册,信息被发送到
服务器端。
2.登录:
(1)客户可以输入账号和密码进行登录,客户端会发送登录信息等待服务器响
应,登录成功后会发出登录成功信息并刷新好友列表。
3.修改:
(1)密码修改:
应该有密码修改功能
(2)信息修改:
可以更改一些注册信息
4.通信:
(1)即时聊天模块:
客户端与客户端之间建立线程进行即时聊天,也包含有简单的对称加解密算法功能。
(2)好友列表:
可以对好友列表进行添加删除等动作。
5.文件传输:
(1)文件传输:
文件传输功能
SERVER:
1.注册回应:
对客户端传送的注册信息进行判断。
(1)HASH加密:
对用户的账号和密码信息进行HASH加密。
(2)重复用户检查:
将加密后信息与已存在账号进行比较,检查是否账号已存在,如果存在就返回错误信息。
(3)注册成功:
将可成功注册的用户账号和密码写入数据库内,并向客户端返回成功信息。
2.修改回应:
(1)对密码和信息修改请求进行判断,执行和返回修改成功信息
3.登录回应:
(1)对登录的账号和密码进行加密检查后发回正确或错误情况,并记录上线信息。
(2)好友列表发送:
给成功登录的账号发送好友列表及好友上线信息。
(3)上线信息发送:
给成功登录的账号的好友发送在线信息(包括IP,端口等等信息)。
4.在线情况:
(1)对登录,在线,离线的用户情况进行统计,记录和通知。
(2)心跳测试:
每隔一段时间发送报文测试用户是否因意外原因离线。
(3)情况记录:
将用户登录时间,IP,下线时间等信息记录入数据库。
3.4逻辑图
图2逻辑图
3.5数据库设计
3.5.1实体关系图
服务器是作为记录和读取数据库信息的载体,与客户端关系并不复杂,这里需要重点考虑客户端之间的关系。
用户与用户之间的关系是较为特殊的递归关系,即描述发生在两个相同实体上的关系。
E-R图如下:
图3E-R图
第四章系统实现
4.1使用XML定义的即时通信协议
UMESSAGE.CS
这两个C#类定义了包括服务器信息,状态信息,注册信息,登录信息,聊天信息或者请求文件传输信息的函数,服务器和客户端通过将它们实例化和序列化再转换成流在网络上进行传输。
UMESSAGE.CS主要代码如下:
[Serializable]
publicclassUMessage
{
publicUMessage(){}
privatestring_nickname;
privatestring_password;
privatestring_accounts;
privatestring_email;
privateint_info;
//表示注册或者登录信息,客户端信息0为注册,1为登录;
服务器返回信息0为用户已存在,1为注册成功,2为服务器未知错误,3为CLIENT在线检查,10为登录失败,11为登录成功
privateFriend[]_friend;
privateint_fn;
privatestring_fg;
publicstringNickname
get{return_nickname;
}
set{_nickname=value;
}
publicstringPassword
get{return_password;
set{_password=value;
publicstringAccounts
get{return_accounts;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 TCP 协议的即时通信软件的设计与实现 协议 即时 通信 软件 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)