[计算机软件及应用]基于TCP协议的简单即时通信软件.doc
《[计算机软件及应用]基于TCP协议的简单即时通信软件.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]基于TCP协议的简单即时通信软件.doc(31页珍藏版)》请在三一文库上搜索。
1、基于TCP协议的简单即时通信软件的设计与实现摘 要即时通信(Instant Message),由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。使用这个统一的接口,可以编写一个可移植的TCP/IP通信程序。使信息能够在INTERNET上可靠的传输。本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负
2、责客户端的登录验证,好友信息的保存和心跳报文的发送。客户端采用P2P方式实现消息传递,并能实现文件的传输。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。关键词:即时通信;文件传输;套接字;TCP协议The Design and Implementation of Simple Instant Message Software Based on TCP ProtocolAbstractInstant messages have several advantages such as real-time, cross-plat
3、form, cheap and efficient. To design a Multi-user IM (instant message) architecture is very important in both theory and realism. Instant message based on TCP/IP protocol that is realized by socket interface. Almost all UNIX operation systems and Microsofts windows operation systems provide support
4、of socket in the kernel. Using the uniform interface, we can develop a portable program of TCP/IP, which help us transfer information in Internet safely and credibly.The system uses the client/server(C/S) mode. The server takes the responsibility of the login message of client, the saving of friend
5、message and Message heartbeat. The transmission of the basic messages of the customer end will be designed on P2P architecture. This thesis explains how the client and server communicate via serializing XML message.Key words: Instant Message; File Transfer; Socket; TCP protocol目 录论文总页数:28页1引言11.1课题背
6、景11.2国内外研究现状11.2.1国外研究现状11.2.2国内研究现状21.3本课题研究的意义21.4本课题的研究方法22相关技术介绍22.1.NET开发平台及C.NET开发语言22.2TCP协议32.2.1TCP/IP网络协议32.2.2TCP传输控制协议32.3套接字42.4流42.4.1流的基本概念42.4.2.NET中的流42.5同步、异步、阻塞和非阻塞52.6C/S模型52.7即时通信协议63系统总体设计73.1需求分析73.2系统基本架构73.3功能模块设计73.4逻辑图93.5数据库设计103.5.1实体关系图103.5.2详细列表104系统实现114.1使用XML定义的即时通
7、信协议114.1.1信息结构MESSAGE.CS&UMESSAGE.CS114.1.2数据结构FriendStruct124.2数据库连接类144.3服务器端154.3.1同步套接字网络监听154.3.2多线程194.3.3计时器194.4客户端204.4.1同步套接字客户端204.4.2采用异步套接字的文件传输23结 论25参考文献26致 谢27声 明281 引言1.1 课题背景即时通信是一个终端连往一个即时通信网路的服务。即时通信不同于e-mail在于它的交谈是实时的。大部分的即时通信服务提供了presence awareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。最
8、早的即时通信软件是ICQ,ICQ是英文中I seek you的谐音,意思是我找你。四名以色列青年于1996年7月成立Mirabilis公司,并在11月份发布了最初的ICQ版本,在六个月内有85万用户注册使用。在因特网上受欢迎的即时通信服务包含了MSN Messenger、AOL Instant Messenger、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ与QQ。 这些服务有赖于许多想法更久的(与普遍)的在线聊天媒介,如Internet Relay Chat一样知名。1970年代早期,一种更早的即时通信形式是柏拉图系统(PLATO sys
9、tem)。之后在1980年代,UNIX/Linux的交谈实时信息被广泛的使用于工程师与学术界,1990年代即时通信更跨越了因特网交流。1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于因特网的即时通信软件。在ICQ的介绍之后,同时在许多地方有一定数量的即时通信方式发展,且各式的即时通信程序有独立的协议,无法彼此互通。这引导使用者同时执行两个以上的即时通信软件,或者他们可以使用支持多协议的终端软件,如Gaim、Trillian或Jabber。近年来,许多即时通信服务开始提供视讯会议的功能,网络电话(VoIP),与网络会议服务开始整合为兼有影像会议与实时信息的功能。于是,这些媒体
10、的分别变的越来越模糊。1.2 国内外研究现状1.2.1 国外研究现状当今,国际上对网络通信系统研究的较好的公司有,思科,Sun,Ms等公司,思科主要研究的是底层的传输;MS,Sun公司研究的是应用层。其中ms公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。当然,ie,同样也不是很受人青睐,这让人想起了,当年的网景公司,网景只是生不逢时。MS不择手段的想打跨网景,可见其对网络的重视。如今,Sun公司在网络应用上捷足先登,凭借着Java,Sun在网络的应用上领先于MS。微软,想用同样的办法搞跨
11、对手,因此它拿出了Visual c#,来对抗Java。这些都是在应用层面的开发工具。应用层上的产品就更显种类繁多。ICQ几乎是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。msn,是MS的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。至于ie,是在Visual c+下开发的产品,虽然有严重的安全隐患,不过,至少能在某种程度上代表当今国际研究的水平。此外,国际上最近出先了新的浏览器Firefox,其性能据说是远高于ie,也许在网络的天下,Ms又有了更强劲的对手。1.2.2 国内研究现状国内在应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络
12、应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏平台,还有其他的一些平台,这些平台基本上都是基于VC+的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。所以效率上不错。此外,tencent的即时通信,也是做的很好的,从某中程度上来说,代表了国内最高的水平。1.3 本课题研究的意义本课题目标是实现局域网用户之间的即时交流和文件传输,通过基础的网络SOKET编程,为局域网内部的即时通信提供一个简单而较安全的解决方案。1.4 本课题的研究方法本系统采用
13、C/S(Client/Server)结构进行设计,使用SQL Server 2000构建数据库,并在.NET环境下使用Visual C#.net语言和SOCKET套接字开发一个基于TCP协议的简单即时通信软件,实现简单的即时聊天,文件传输等功能。2 相关技术介绍2.1 .NET开发平台及C.NET开发语言.NET框架是Microsoft公司推出的一种全新的开发平台,提供了统一的、面向对象并且可以扩展的编程类库和完善的集成开发环境,大大简化了应用程序的开发过程,并且具有良好的移植性和安全性。微软为了推行.NET战略,特别为.NET平台设计了一种语言C#。C#是由C和C+派生而来的一种“简单、流行
14、、面向对象、类型安全”的程序设计语言,其综合了Visual basic的高效率和C+的强大功能,然而更多的人感觉C#更类似JAVA。事实上C#融合了大量的JAVA思想,C#是.NET的关键性语言,它是整个.NET平台的基础。与C#相比,.NET所支持的其它语言显然是配角,包括VC+.NET在内。但是微软并没有打算放弃VC+.NET,相反,微软对VC+.NET有着另一番独特的打算,VC+.NET的定位与C#不完全重合,VC+.NET应用范围仍强于C#,这一点无论对微软公司还是软件业应用现状都非常重要。可见+.NET在NET框架中已经退化成了底层的语言了,就像C+之前的标准C语言一样,以后将只有开
15、发底层或桌面程序的程序员使用它。它虽然仍旧强大,但是已经不是主流,而主流就是C#语言。2.2 TCP协议2.2.1 TCP/IP网络协议协议是对等的网络实体之间通信的规则,可以简单地理解为网络上各计算机彼此交流的一种“语言”。网络通信协议设计的基本原则是层次化,层和协议的集合被称为网络体系结构。相邻层之间的接口定义了下层向上层提供的基本操作和服务,下层向上层提供的服务分两种形式:面向连接的服务和无连接的服务。计算机网络中已经形成的网络体系结构主要有两个:OSI参考模型和TCP/IP参考模型。TCP/IP参考模型是因特网(Internet)的基础。和OSI的7层协议相比,TCP/IP协议只有4个
16、层次。通常说的TCP/IP是一组协议的总称,TCP/IP实际上是一个协议族,包括100多个相互关联的协议,其中IP(Internet Protocol, 网际协议)是网络层最主要的协议;TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议是传输层中最主要的协议),一般认为IP、TCP、UDP是最根本的三种协议,是其他协议的基础。2.2.2 TCP传输控制协议面向连接的通信可以使用可靠通信,在这时候,第四层协议发送数据接收方的确认,如果未收到数据或者数据被损坏,则请求重新传输。TCP协议就使用这种
17、可靠通信。使用TCP协议的应用层协议包括HTTP、FTP、SMTP和Telnet等。TCP要求在发送数据之前必须打开连接。服务器应用程序必须执行一个称作被动打开(passive open)的操作,以利用一个已知的端口号创建一个链接,这是,服务器并不是对网络进行呼叫,而是侦听并等待引入的请求。客户应用程序必须执行一个主动打开(active open),为此,它向服务器应用程序发送一个同步序列号(SYN)以标识连接。客户应用程序可以将动态端口号作为本地端口使用。服务器必须向客户发送一个确认(ACK)以及服务器的序列号(SYN)。随后,客户回复一个ACK,这样就建立了链接。现在可以发送和接收消息了。
18、接收消息后,总是返回ACK消息。如果在收到ACK之前发送方已经超时,则消息将被放到重发队列中以再次发送。由于它的握手机制,所以TCP协议比较复杂并且费时,但此协议在处理数据时对数据包的传送有保障,从而使得在应用程序协议中不需要再包括该功能。2.3 套接字套接字这个术语并没有定义某个协议:它具有两层含义,但两者都与一个协议相关。第一个含义是套接字编程API,它最初由伯克利大学为BSD UNIX而创建。BSD套接字在经过修改后被用作Windows环境的编程接口(并且被命名为WinSock)。WinSock API被包装在System.Net.sockets命名空间的.NET类中。Windows S
19、ockets 是一个独立于协议的编程接口,用于编写网络应用程序。套接字的第二层含义表示一个用于在进程间进行通信的终端。在TCP/IP中,每个终端都与一个IP地址和一个端口号绑定。我们必须对流式套接字和数据报套接字这两种类型进行区分。流失套接字用TCP/IP协议来使用面向连接的通信;另一方面,数据报套接字用UDP/IP来使用无连接通信。2.4 流2.4.1 流的基本概念流的概念已经存在很长时间了。流是一个用于传输数据的对象。数据的传输有两个方向:1) 如果数据从外部源传输到程序中,这就是读取流。2) 如果数据从程序传输到外部源,这就是写入流。外部源常常是一个文件,但也不完全都是文件,它还可以是:
20、1) 网络,使用一定的网络协议与网络上其它计算机或终端交换数据。2) 一个指定的管道。3) 一块内存区域。2.4.2 .NET中的流在这些情况中,微软提供了一个.NET基类System.IO.MemoryStream来读写内存数据使用System.Net.Sockets.NetworkStream处理网络数据。读写管道没有相应的流类,但有一个常见的流类System.IO.Stream,如果要编写一个这样的类,可以从这个基类继承。流对外部数据源不做任何假定。外部源还可以是代码中的一个变量,使用流在变量之间传输数据的技术是一个非常有用的技巧,可以在数据类型之间转换。在网络编程中我们经常会使用到网络
21、中的流对象:NetworkStream。它实现了.NET中标准的Stream机制,即可以使用NetworkStream通讯网络套接字用标准的流操作进行网络数据的读写。它提供以下的功能:1) 一个统一的从网络中读取数据的方法2) 与其他的.NET流兼容,这样你可以很容易地移植程序。2.5 同步、异步、阻塞和非阻塞 同步(synchronous):所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步(asynchronous):异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。阻塞(Block):指执行此套接字的网络调用时,直到调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 基于 TCP 协议 简单 即时 通信 软件
链接地址:https://www.31doc.com/p-1991910.html