欢迎来到天天文库
浏览记录
ID:14048733
大小:130.50 KB
页数:6页
时间:2018-07-25
《用 vc 实现基于 tcp》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用VC实现基于TCP/IP的局域网内点对点的大文件传输(1.西北民族大学中国民族信息技术研究院,甘肃兰州730030;2.西北民族大学计算机科学与信息工程学院,甘肃兰州730030)[摘要]文章对网络编程中涉及到的TCP/IP协议,讨论了Winsock通信机制核心技术,利用VC++的MFC编写基于客户/服务器模式的通信程序.实验结果表明:实现高达99M的文件无差错快速传输,耗时为11s.[关键词]TCP/IP;套接字;Winsock;文件传输TCP/IP是TransmissionControlP
2、rotocol/InternetProtocol的简写,中文译名为传输控制协议/互联网协议,是当今世界上最广而不基于任何特定硬件平台的网络通信协议.采用TCP/IP可以解决异种机联网和异种网互连的问题,并可以访问当今世界上最有影响力的Internet网TCP/IP协议的基本思想,是通过网间连接层将各种不同的网络连接起来,在各个网络的底层协议之上构造一个虚拟的大网,使用户与其他网的通讯就像与本网的主机通讯一样方便实现,这一思想的相关协议有TELNET、FTP、SMTP、TCP、UDP、IP、ICM
3、P、ARP、RARP等[1].1TCP/IP的网络体系结构TCP/IP协议集采用层次体系结构,如图1所示,每层具有自己特定的功能,底层为高层提供服务,整个系统遵循对等实体通信原则,图2是使用TCP/IP协议的局域网的协议分成模型,可以看出,每一层在逻辑上都与通信端的对应层相连接.图中所示的服务器程序持续监听通信客户端;客户程序仅周期性地与服务器相连接以交换数据,其中TCP协议层提供相当于OSI参考模型中传输层的服务,为收、发端应用程序提供通信;IP协议层负责提供统一地数据报;链路层主要功能是收、
4、发IP层地IP数据报;TCP/IP之上是该协议集提供的各种应用服务,而底层网络可以是不同的物理网络,如Ethernet、TokenRing、X.25公共分组交换网等.2Sockets(套接字)简介Sockets(套接字)最早是由Berkeley大学提出在UNIX操作系统下实现TCP/IP通信协议的开发接口,随着Internet在全球范围内的广泛使用,Sockets已成为网络编程的通用接.Microsoft公司以Sockets为基础开发的Winsock建立了Windows环境下网络间的编程接口[2
5、].Sockets的实质是通信端点的一种抽象,它提供一种发送和接受数据的机制.根据通信性质不同可分为:StreamSockets(流式套接字)和DatagramSockets(数据报套接字),如图3所示为这两种套接字的基本通信方式.其中StreamSockets提供无差错的、面向连接的、无长度限制的双向字节流传输,适应于处理大量数据,尤其适合于FTP服务.DatagramSockets支持双向的数据传输、但传输过程中不能保证可靠性和无差错性.我们的程序设计中选择StreamSockets来完成C
6、/S模式的通信,保证能够数据准确、无误的传输.3Winsock通信机制对于开发Winsock应用程序而言,了解套接字的通信机制是很必要的[3].应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输,应用程序和Winsock都工作在Windows的用户模式下,操作系统仅仅通过Winsock是不能完成网络间的通信,还需要底层的支持,而套接字仿真器(套接字核心模式驱动程序)和传输驱动程序接口(TransportDriverInterface,TDI)是负责操作系统核心态环境下的网络通信,起到
7、了Winsock和传输协议之间的通信桥梁作用.如图4所示,Winsock是网络通信应用程序于套接字仿真器间的接口,TDI是套接字仿真器和传输协议间的接口套接字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在AFDSYS文件中实现),同时负责与底层传输驱动程序对话传输驱动程序接口(TDI)负责核心模式驱动程序与传输协议间的通信.当应用程序利用Winsock发送和接受数据时,并不是由Winsock从网络上发送和接收数据的,而是由核心模式驱动程序AFDSYS负责管理发送和接收缓
8、冲区来发送和接收数据.也就是说,当应用程序调用send或WSASend函数来发送数据时,AFDSYS将把数据复制进他自己的发送缓冲区,然后send后WSASend函数立即返回AFDSYS在后台负责把数据发送出去,远程客户端接收数据的情况也类似,由接收方的AFDSYS在后台负责把数据复制到自己的接收缓冲区,然后当应用程序调用recv后WSARecv函数来接收数据时,把数据由AFDSYS管理的接收缓冲区复制到应用程序提供的缓冲区中.AFDSYS管理的发送缓冲区SO-SNDBUF和接收缓冲区SO-RC
此文档下载收益归作者所有