《基于TCP的CS模式程序设计.doc》由会员分享,可在线阅读,更多相关《基于TCP的CS模式程序设计.doc(16页珍藏版)》请在金锄头文库上搜索。
1、哈尔滨理工大学课程设计题目: 基于TCP的CS模式程序设计院 系: 计算机科学与技术学院 网络工程系班 级: 网络11-2班学 号: 姓名: 同组成员: 指导教师: 成 绩: 2014年06月27日一.系统设计的目标1.1 选题目的和意义在Windows操作系统下,使用Socket编程实现两个进程之间的通信,两个进程间使用TCP建立可靠连接,熟悉TCP协议以及套接字编程原理;两个进程间使用C/S工作模式,在此结合并发服务器原理,实现服务器同时与多进程之间进行通信,深入了解C/S工作模式。TCP是传输层的应用协议,可通过多方面来保证数据传输的可靠性,它采用了停止等待方式来回应数据的接收,只有当接
2、收到数据时,用户才发送数据确认报文,同时此协议使用滑动窗口方法来控制网络拥塞,提高数据传输的可靠性。基于TCP/IP协议和套接字编程原理为服务器端完成基本数据配置,主要采用套接字编程原理,通过调试运行并且经过完善后,实现并发服务器的功能。在这次课程设计的过程中,对于网络编程有了更深一步的了解。首先是对于计算机网络基础这方面,对于网络体系中的几种分层方法,每层的作用都由了系统的理解,特别是对于Socket编程这一块,套接字的创建、绑定以及使用,基于TCP、UDP的编程以及并发服务器的原理都有了深一步的理解,这次课程设计对于以后进行网络的开发有很大的帮助。即时通信(Instant Message)
3、,由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微软的WINDOWS系统都在内核提供了对SOCKET字接口的支持。使用这个统一的接口,可以编写一个可移植的TCP/IP通信程序。使信息能够在INTERNET上可靠的传输。 本文设计并实现了基于局域网内的简单即时通信系统,系统采用C/S模式,底层通信通过SOCKET套接字接口实现,服务器负责客户端的登录验证,好友信息的保存和心跳报文的发送。客户端采用P2P方式实现消息传递,并能
4、实现文件的传输。本文首先讨论了同步套接字,异步套接字,多线程并发执行任务等;然后阐述了客户端、服务器如何使用XML序列化的消息进行通信。本课题目标是实现局域网用户之间的即时交流和文件传输,通过基础的网络SOKET编程,为局域网内部的即时通信提供一个简单而较安全的解决方案。1.2 题目开发背景即时通信是一个终端连往一个即时通信网路的服务。即时通信不同于e-mail在于它的交谈是实时的。大部分的即时通信服务提供了presenceawareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。最早的即时通信软件是ICQ,ICQ是英文中Iseekyou的谐音,意思是我找你。四名以色列青年于
5、1996年7月成立Mirabilis公司,并在11月份发布了最初的ICQ版本,在六个月内有85万用户注册使用。在因特网上受欢迎的即时通信服务包含了MSNMessenger、AOLInstantMessenger、Yahoo!Messenger、NETMessengerService、Jabber、ICQ与QQ。这些服务有赖于许多想法更久的(与普遍)的在线聊天媒介,如InternetRelayChat一样知名。1970年代早期,一种更早的即时通信形式是柏拉图系统(PLATOsystem)。之后在1980年代,UNIX/Linux的交谈实时信息被广泛的使用于工程师与学术界,1990年代即时通信更跨
6、越了因特网交流。1996年11月,ICQ是首个广泛被非UNIX/Linux使用者用于因特网的即时通信软件。在ICQ的介绍之后,同时在许多地方有一定数量的即时通信方式发展,且各式的即时通信程序有独立的协议,无法彼此互通。这引导使用者同时执行两个以上的即时通信软件,或者他们可以使用支持多协议的终端软件,如Gaim、Trillian或Jabber。近年来,许多即时通信服务开始提供视讯会议的功能,网络电话(VoIP),与网络会议服务开始整合为兼有影像会议与实时信息的功能。于是,这些媒体的分别变的越来越模糊。1.2国内外研究现状1.2.1国外研究现状当今,国际上对网络通信系统研究的较好的公司有,思科,S
7、un,Ms等公司,思科主要研究的是底层的传输;MS,Sun公司研究的是应用层。其中ms公司凭借其在操作系统的垄断地位,为了在网络的发展中取得先机,采用了各种各样的手段。但是,其捆绑的msn,无论从功能上,还是技术上来说,都不算是非常先进的。当然,ie,同样也不是很受人青睐,这让人想起了,当年的网景公司,网景只是生不逢时。MS不择手段的想打跨网景,可见其对网络的重视。如今,Sun公司在网络应用上捷足先登,凭借着Java,Sun在网络的应用上领先于MS。微软,想用同样的办法搞跨对手,因此它拿出了Visualc#,来对抗Java。这些都是在应用层面的开发工具。应用层上的产品就更显种类繁多。ICQ几乎
8、是国际上通用的即时通信工具,由于在我国它的应用不是很广,所以,其原理也很少被介绍。msn,是MS的产品,同样在国内没什么市场,所以,对其原理,也很少被讨论过。至于ie,是在Visualc+下开发的产品,虽然有严重的安全隐患,不过,至少能在某种程度上代表当今国际研究的水平。此外,国际上最近出先了新的浏览器Firefox,其性能据说是远高于ie,也许在网络的天下,Ms又有了更强劲的对手。1.2.2国内研究现状国内在应用层上的网络应用软件目前发展异常的火爆,因为我国有着网络应用的最大的市场,现在国内网络的基础性建设发展迅速,应用软件也层出不穷,其中,在游戏的领域中,网络通信的工作做的不错,如联众游戏
9、平台,还有其他的一些平台,这些平台基本上都是基于VC+的,用的都是Socket通信,但是为了效率,这些平台没有用MFC提供的CSocket类,而是直接用Socket进行通信。所以效率上不错。此外,tencent的即时通信,也是做的很好的,从某中程度上来说,代表了国内最高的水平。1.3 TCP/IP体系结构TCP/IP的中文译名为传输控制协议/网际协议,又叫网络通讯协议,这个协议是Internet最基本的协议,Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协
10、议的七层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上互相通信。这七层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了四层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求,如下图所示。图1 计算机网络体系结构应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等。传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化,数据确认和丢失、重传等。如传输控制协议(TCP),用户数据报协议(UDP)等,TCP和U
11、DP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被传送并到达接收。网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否正确而接收),如网际协议(IP)。网络接口层:接收IP数据包并进行传输,从网络上接收物理帧,抽取IP数据报转交给上一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet)来传送数据。1.4 TCP传输ACK=2000FIN=2000ACK=1800FIN=2000SYN=1001ACK=800SYN=1000ACK=3ACK=2SYN=12MSL图2 TCP连接中分组交换以及客户端与服务器的状态转
12、换TCP协议在IP协议之上,提供可靠的传输服务。这种服务的特点:可靠、全双工、流式和无结构传输。TCP协议使用了积极确认和重传送的技术来实现可靠传输。接收者在收到发送者发送的数据后,必须发送一个相应的确认(ACK)消息,表示他已经收到数据。发送者保存发送的数据的记录,在发送下一个数据之前等待这个数据的确认消息在他发送这个数据的同时,启动了一个计时器。在一定时间内没有接收到确认消息,就认为这个数据在传输过程中丢失了,接着就会发送这个数据。同时TCP实体又采用了滑动窗口协议。当发送方传送一个数据报到达目的地时,接收方的TCP实体向发送方发送一个数据报,其中包含一个确认序号,它等于希望收到的下一个数
13、据报的顺序号。建立了一个TCP连接,需要三次握手过程,连接才能成功建立,如图二所示。握手过程的第一段的代码位设置为SYN,序号为J,表示开始一次握手。接收方收到此报文断后,向发送方回发一个报文段,代码位为SYN和ACK,序号为K,确认序号为J+1,表示接收方同意建立此连接。发送者收到此报文段后,发送ACK建立连接,完成三次握手以后,双方就开始正式传送数据。在通信完成阶段,两方通过四次断开来释放连接,如图二,客户端请求释放连接,发送有效位为FIN,服务器端给一个确认信号,若服务器端没有数据发送,便向客户端发送FIN请求,客户端对此回应,等待2MSL,彻底断开连接。1.5 C/S模式鉴于此次设计目
14、的,采用Linux环境下使用TCP实现点到点的可靠连接,实现基于TCP/IP协议的面向连接的通信,连接双方分为客户端和服务器端,主要实现过程如图3所示。图3 TCP客户/服务器的套接字连接TCP套接字编程中,服务器实现的步骤:(1) 使用socket()函数创建套接字。(2) 将创建的套接字绑定到指定的地址结构。(3) Listen()函数设置套接字为监听模式,使服务器进入被动打开的状态。(4) 接受客户端的连接请求,建立连接。(5) 接收、应答客户端的数据请求。(6) 终止连接。客户端实现的步骤:(1) 使用socket()函数创建套接字。(2) 调用connect()函数建立一个与TCP服
15、务器的连接。(3) 发送数据请求,接收服务器的数据应答。(4) 终止连接。综上所述,TCP/IP应用中的服务器必须先于客户端进程启动,直到对客户端的响应结束或强迫终止。二.系统原理2.1开发配置环境简介CodeBlocks安装,和普通安装一样,你不会选择可以一直next完成,不做详细叙述。 注意:当中有一步让你选择编译器,你可以选择 GUN GCC Compiler,并设置位默认(default)。如果没做也没事儿,可以在编译器(Compiler)设置进行设置。 GTK+配置 安装GTK 解压gtk+bundle_2.24.10-20120208_win32.zip到C:gtk+ 。也可以是别处,你个人喜好,随便哪儿都行。 配置环境变量 添加“C:gtk+bin”到系统环境变量(path) 注意:GTK解压的位置不同,你相应变一下就行了。 导出编译库信息 导出编译库信息,一会儿要在Code:Blocks上配置编译、链接环境。 pkg-config -cflags gtk+-2.0 cflags.txt cflags.txt pkg-config -libs gtk+-2