版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1122324WinSocket25TCP36Visual C+77881 0914101411161216利用 Socket 实现双机通信一、设计任务1.利用 WinSock 来实现双机通信,理解TCP 状态机图。2.要求使用 WinSock 编程,采用其中的TCP 面向连接方式,实现文本数据的交换。二、 WinSocket 简介及特点原理2.1、什么是 socket所谓 socket 通常也称作 "套接字 ",用于描述 IP 地址和端口,是一个通信链的句柄。应用程序通常通过 "套接字 " 向网络发出请求或者应答网络请求。Socket 接口是 TC
2、P/IP 网络的 API,Socket 接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP 网络上的应用程序。要学 Internet 上的 TCP/IP 网络编程,必须理解 Socket 接口。 Socket 接口设计者最先是将接口放在 Unix 操作系统里面的。如果了解 Unix 系统的输入和输出的话,就很容易了解 Socket 了。网络的 Socket 数据传输是一种特殊的 I/O ,Socket 也是一种文件描述符。 Socket 也具有一个类似于打开文件的函数调用 Socket() ,该函数返回一个整型的 Socket 描述符,随后的连接建立、数据传输等操作都是通过该 So
3、cket 实现的。常用的 Socket 类型有两种:流式Socket ( SOCK_STREAM)和数据报式 Socket(SOCK_DGRAM)。流式是一种面向连接的Socket ,针对于面向连接的TCP服务应用;数据报式 Socket 是一种无连接的Socket ,对应于无连接的UDP服务应用。最重要的是, socket 是面向客户 / 服务器模型而设计的,针对客户和服务器程序提供不同的 socket 系统调用。客户随机申请一个 socket ( 相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫 ) ,系统为之分配一个 socket 号;服务器拥有全局公认的 socket ,任何客户
4、都可以向它发出连接请求和信息请求 ( 相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码 ) 。socket 利用客户 / 服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器 socket 半相关为全局所公认非常重要。不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的 socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。2.2 、 WinSocket 的通信原理WinSock 是一个基于 Socket 模型的 API 。 WinSock在 Windows98, Window NT中使用。 WinSock 一般由两部分组成:开发组
5、件和运行组件。开发组件是供程序员在windows 环境下开发网络应用程序使用的,它包括应用程序接口库函数、 头文件和实现的文档,其中最主要的是WINSOCK.运H行组件是以动态链接库(DlL) 来实现 socket 接口的。文件名为WINSOCK.DLL应用程序在执行时装入它就能实现网络通信功能三、 TCP 简介及特点原理1. 什么是 TCPTCP 是一种面向连接(连接导向)的、可靠的、基于字节流的运输层( Transport layer)通信协议。在简化的计算机网络OSI 模型中,它完成第四层传输层所指定的功能。在因特网协议族(Internet protocol suite)中, TCP 层
6、是位于IP 层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP 层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8 位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU) 的限制)。之后TCP 把结果包传给IP 层,由它来通过网络将包传送给接收端实体的TCP 层。 TCP 为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK) ;如果发送端实体在合理的往返时
7、延(RTT) 内未收到确认,那么对应的数据(假设丢失了) 将会被重传。TCP 用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。首先, TCP 建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用慢启动算法。2.TCP 功能提供计算机程序间连接、检测和丢弃重复的分组、完成数据报的确认、流量控制和网络拥塞。3.TCP 所提供服务的主要特点( 1)面向连接的传输;( 2)端到端的通信;( 3)高可靠性,确保传输数据的正确性,不
8、出现丢失或乱序;( 4)全双工方式传输;( 5)采用字节流方式,即以字节为单位传输字节序列;( 6)紧急数据传送功能。4.TCP 支持的服务器类型不管怎样,TCP/IP是一个协议集。为应用提供一些" 低级 " 功能 ,这些包括IP 、 TCP 、 UDP 。其它是执行特定任务的应用协议,如计算机间传送文件、发送电子邮件、或找出谁注册到另外一台计算机。因此,最重要的" 商业 "TCP/IP服务有 :文件传送File Transfer远程登录Remote login计算机邮件Mail网络文件系统(NFS)远程打印 (Remote printing)远程执行
9、(Remote execution)名字服务器 (Name servers)终端服务器 (Terminal servers)5.TCP 的端口号TCP 段结构中端口地址都是16 比特,可以有在065535 范围内的端口号。对于这 65536 个端口号有以下的使用规定:( 1)端口号小于 256 的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何 TCP/IP 实现所提供的服务都用 11023 之间的端口号,是由IANA 来管理的;( 2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;( 3 )大多数 TCP/IP 实现给临时端口号分配 10
10、245000 之间的端口号。大于 5000 的端口号是为其他服务器预留的。6.TCP 协议是如何确保数据传输高可靠性为了保证可靠性,发送的报文都有递增的序列号。序列号和确认号用来确保传输的可靠性。此外,对每个报文都设立一个定时器,设定一个最大时延。对那些超过最大时延仍没有收到确认信息的报文就认为已经丢失,需要重传。7 TCP 的服务流程TCP 协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3 个过程。 TCP 提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。尽管 TCP 和 UDP 都使用相同的网
11、络层( IP ), TCP 却向应用层提供与UDP完全不同的服务。TCP 提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP 的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP 连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂 ”,然后才说明是谁。在一个TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于TCP 。TCP通过下列方式来提供可靠性:? 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段( segment ) TCP 如何确定报文段的
12、长度。? 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。?当 TCP 收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒?TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。? 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的
13、顺序交给应用层。? 既然 IP 数据报会发生重复, TCP 的接收端必须丢弃重复的数据。?TCP 还能提供流量控制。TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。两个应用程序通过TCP 连接交换8bit 字节构成的字节流。TCP 不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10 字节,又传20 字节,再传50 字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分4 次接收这80 个字节,每次接收20 字节。一端将字节流
14、放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外, TCP 对字节流的内容不作任何解释。TCP 不知道传输的数据字节流是二进制数据,还是ASCII 字符、 EBCDIC 字符或者其他类型数据。对字节流的解释由 TCP 连接双方的应用层解释。这种对字节流的处理方式与Unix 操作系统对文件的处理方式很相似。Unix的内核对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对Unix 的内核来说,它无法区分一个二进制文件与一个文本文件。TCP 是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN , ACK 。这种建立连接的方法可以
15、防止产生错误的连接,TCP 使用的流量控制协议是可变大小的滑动窗口协议。第一次握手:建立连接时,客户端发送SYN 包 (SEQ=x) 到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到SYN 包,必须确认客户的SYN(ACK=x+1),同时自己也送一个SYN 包 (SEQ=y), 即 SYN+ACK包,此时服务器进入 SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=y+1),此包发送完毕,客户端和服务器时入Established状态,完成三次握手。四、 Visual C+简介VisualC+ 是一个功能强大的可视
16、化软件开发工具。自公司推出 VisualC+1.0 后,随着其新版本的不断问世,程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0)1993 年 MicrosoftVisualC+ 已成为专业,但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。Visual C+ 它大概可以分成三个主要的部分:1、 Developer Studio ,这是一个集成开发环境,我们日常工作的99% 都是在它上面完成的,再加上它的标题赫然写着“Micros
17、oft Visual C+ ,所”以很多人理所当然的认为,那就是 Visual C+ 了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多 Wizard ,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于 VC 的,它也同样用于 VB ,VJ ,VID 等 Visual Studio 家族的其他同胞兄弟。所以不要把 Developer Studio 当成 Visual C+ , 它充其量只是 Visual C+ 的一个壳子而已。2、 MFC 。从理论上来讲, MFC 也不是专用于
18、Visual C+ , Borland C+ , C+Builder 和 Symantec C+ 同样可以处理 MFC 。同时,用 Visual C+ 编写代码也并不意味着一定要用MFC ,只要愿意,用Visual C+ 来编写 SDK 程序,或者使用STL ,ATL ,一样没有限制。不过, Visual C+ 本来就是为 MFC 打造的, Visual C+ 中的许多特征和语言扩展也是为 MFC 而设计的,所以用 Visual C+ 而不用 MFC 就等于抛弃了 Visual C+ 中很大的一部分功能。但是, Visual C+ 也不等于 MFC 。3、 Platform SDK 。这才是
19、Visual C+ 和整个 Visual Studio 的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK 是以 Microsoft C/C+ 编译器为核心(不是 Visual C+ ,看清楚了),配合MASM ,辅以其他一些工具和文档资料。上面说到 Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是 NMAKE ,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio 的基石。五、设计方案5.1 WinSocket通信的步骤:1. 在服务器端的应用程序中的网络通信的步骤如下:(1)建立服务器端的So
20、cket ,开始侦听整个网络中的连接请求。(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接,再继续进入监听状态。(3)在监听的过程中, 如果有用户发出了请求, 则服务器会产生一个新的连接Socket来处理用户的请求,而原来的Socket 仍然会进行监听操作。(4)当完成通信后,服务器关闭与客户端的Socket 连接。2. 在客户端应用程序中的网络通信的步骤如下:(1) 建立一个客户端的 Socket 。(2) 从命令行中得到服务器的名字,并进行查询以得到服务器的IP 地址;(3)从命令行中得到服务器所提供的端口号,以便进行下一步的操作;(4) 发送
21、连接请求到服务器,并等待服务器的回馈信息。(5) 连接成功后,与服务器进行数据的交互。(6)数据处理完毕后,关闭自身的Socket 连接,释放进行连接所分配的资源,客户端的程序运行完毕。5.2 、程序中用到的过程函数介绍如下:1、 Socket过程Socket 过程创建一个套接字并返回一个整型描述符:Descriptor = socket ( protofamily type protocol)其中 :protofamily: AF-INET表示 TCP/IP 协议系列type: SOCK_STREAM表示面向连接的流传输SOCK_DGRAM表示无连接的面向消息传输Protocol:一般情况下
22、为 02、 Bind 过程在套接字被创建之后,服务器使用Bind 过程提供一个传输层地址,服务器将通过它等待通信。Bind(socket localaddr addrlen)其中:socket是一个套接字的描述符localaddr是将要赋予套接字的本地地址,是sockaddr 结构。Addrlen是本地地址的长度3、 Listen过程服务器调用 Listen过程将套接字设为被动模式以使它能被用来等待客户的通信。Listen(socket queuesize)其中:socket是一个套接字的描述符queuesize 表示该套接字的请求队列的长度, 请求队列的存在允许系统在服务器正在处理上一个请求
23、时保存到达的其它请求。4、 Connect 过程客户使用 Connect 过程与指定服务器建立连接。Connect(socket saddress saddresslen)其中:socket是客户端计算机上用于该连接的套接字的描述符saddress是服务器地址与协议端口号,是sockaddr 结构saddresslen是 saddress 的长度5、 Accept 过程服务器调用 Accept 过程来接受客户的一个连接请求newsock= accept (socket caddress caddresslen)其中:socket是服务器已经创建并联编于指定协议端口的套接字的描述符caddres
24、s 用于存放客户端的地址,是sockaddr 结构caddresslen是一个指向整型的指针,用于存放caddress 的长度6、 Send 过程如果套接字已连接, send 过程可用来传输数据。Send(socket data length flags)其中:socket 是使用的服务器 / 客户套接字的描述符data 是待发送数据在内存中的地址length表示数据的字节数flags包含了请求特殊选项的位,做系统调试用。7、 Recv 过程一个应用可以条用recv 从一个连接的套接字接收数据。Recv(socket buffer length flags)其中:socket 是从中接收数据的
25、服务器/ 客户套接字的描述符buffer表示内存中用来存放接收数据的地址length表示缓冲区的大小flags包含了请求特殊选项的位,做系统调试用。8、 Close 过程Close 过程告诉系统终止对一个套接字的使用。Close(socket)其中 : socket 是要关闭的套接字的描述符在 Winsock 中,用 closesocket(socket)来关闭套接字。六、系统的原理框图和程序流程图程序流程图:strType="s"InputType()<0WSAStartup(MAKEWORDWSAStartup(cout<<"svr or c
26、li(s/c):"MAKEWORDcout<<"WSAStartupstructsockaddr_inaddr,accAdderron"七、实验中的问题r;structsockaddr_inaddr;cout<<"WSAStartup erron"strType="s"1、在建立cout<<"tcp(sock=socket(PSocketServer.连接时,两端的端口号必须设为一致,否则无法建立连接。n"cout<<"tcpF(sock=sock
27、et(PINET,SOCKclient.n"2、return0;建立好连接之后,必须按照给定return1;的格式输入通信信息,即m+输入的信息内容,否F_INET,SOCKClientProc();WSACleanup();则,将会出现“ no this command”的提示。WSACleanup();return-1;exit(-1);3、如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。bind(sock,(stru4、必须先连接服务器端,再连接客户端,否则,不能预期将服务器端和客户端连connect(sock,(stsockaddr*)&通。tructsockaddr*)1WSACleanup();八、实验结果及分析WSACleanup();程序运行后,会出现一个doc 窗口,输入“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 疾病保险课件教学课件
- 2024年度影视版权许可协议
- 04年影视制作委托合同
- 2024年度办公楼照明系统灯具更换外包协议
- 2024年度“生态修复”工程咨询服务合同
- 制作课件教学课件
- 2024年广告发布与装修施工合同协议
- 2024在熔盛重工与淡水河谷砂石船建造合同签约仪式上的致辞熔盛重工朱文花
- 2024年度暖通设备安装及调试合同
- 2024土地使用权转让合同(含开发权)
- 黄河商品交易市场介绍稿
- Unit 3 My friends Part C Story time(教学设计)-2024-2025学年人教PEP版英语四年级上册
- 2024中国海油校园招聘2024人(高频重点提升专题训练)共500题附带答案详解
- 孙中山诞辰纪念日主题班会主题班会
- 2024年安徽省合肥市中考语文题卷(含答案)
- G -B- 43630-2023 塔式和机架式服务器能效限定值及能效等级(正式版)
- 24春国开电大《工具书与文献检索》平时作业1-4答案
- 文艺复兴经典名著选读 知到智慧树网课答案
- 2024年北京出版集团有限责任公司招聘笔试冲刺题(带答案解析)
- 2022-2023学年福建省厦门一中九年级(上)期中物理试卷
- 足球球性球感练习教案
评论
0/150
提交评论