通信工程毕业设计(论文)基于局域网的文件传输系统的设计与实现.doc
-
资源ID:4142422
资源大小:307.50KB
全文页数:44页
- 资源格式: DOC
下载积分:8金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
通信工程毕业设计(论文)基于局域网的文件传输系统的设计与实现.doc
本科毕业设计(论文)题目:基于局域网的文件传输系统的设计与实现院 (系): 电子信息工程学院专 业: 通信工程 班 级: 学 生: 学 号: 指导教师: 2012年 6月基于局域网的文件传输系统的设计与实现摘 要在这个信息化时代,计算机网络技术的迅猛发展影响了几乎包括政治、文化、生活、经济在内的每一个角落,推动了人类社会向信息化社会的逐步转变;同时我们也应该清醒地认识到文件传输的问题是计算机网络发展过程中的一个不容忽视的问题。在如今拥塞的网络上,各种数据在争夺着网络资源,如何使传输的文件更加可靠的到达目的地,同时如何友好的解决文件分类分组高效传输等问题都是需要有待提高和完善的地方。很多情况下,人们的日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备或Internet上的服务器才能实现。这就给那些具有大规模内部网络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具,在内部网络中实现文件交换。本文件传输系统的设计选用VC+6.0为开发工具,以C/S模式通过建立Socket连接后实现局域网快速,准确,安全的点对点文件传输功能。本系统能够促进局域网内用户之间的文件资源共享,满足主机之间信息交流,确保文件传输安全性,有效地提高工作效率。关键字:套接字;网络编程;C/S模式;TCP/IPDesign and implementation of file transfer system based on local area networkAbstract In this information era, the rapid development of computer network technology has affected every corner almost, including politics, culture, life, economic, and promote the gradual transformation of human society to information society; We should also clearly recognize that the file transfer problem is a problem not to be ignored in the development of computer networks. In today's congested network, various data competing for network resources, how to make transmission more reliable, and how to resolve the efficient problem is need to be improved and perfected. In many cases, people's daily work is required to use file transfer to complete. But most of the file transfer capabilities require the removable disks and other hardware devices or servers on the Internet. This caused many problems for those large-scale internal network users, such as a waste of money, a waste of network resources, virus attacks, reduced work efficiency. In order to facilitate the sharing of resources of the host in the LAN, We need to develop a LAN-based file transfer tool for document exchanged in the internal network. The file transfer system design uses VC+6.0 as development tools. By creating a C/S Socket connection to realize fast, accurate, secure peer-to-peer file transfer capabilities. The system can promote the sharing of files between the LAN user to meet the exchange of information between the host and ensure the file transfer security, and effectively improve work efficiency.Key Words: Socket;Network programming;C/S mode;TCP/IP目 录摘 要IABSTRACTII1 绪论11.1前言11.2国内外研究现状11.3课题研究的意义11.4本文主要研究内容22 系统需求分析32.1现行业务系统描述32.2现行系统主要存在的问题分析32.3提出解决方案33 TCP/IP协议53.1开放式系统互连参考模型53.2 TCP/IP技术53.2.1 TCP/IP体系结构63.2.2 IP协议73.2.3 TCP协议 TCP/IP特点73.2.4 TCP/IP传送文件机制84 SOCKET网络程序设计技术104.1 Socket编程104.1.1 Winsock简介104.1.2 Winsock通信机制114.1.3 Winsock编程模型134.2主要函数介绍154.3 C/S构架204.3.1 C/S构架软件的优势与劣势205 软件开发225.1程序功能分析225.2系统总体架构225.3设计流程图225.4系统功能模块设计255.4.1软件设计255.4.2服务器模块255.4.3客户端模块286 软件实现与测试307 总结34致 谢35参考文献36毕业设计(论文)知识产权声明37毕业设计(论文)独创性声明381 绪论1.1前言当今世界科学技术飞速发展,尤其以计算机通信网络为代表的互联网技术更是日新月异,令人眼花燎乱,目不睱接。在计算机与网络迅速发展的今天,借助于网络进行信息资源交流给人们带来了极大的方便。随着互联网技术的迅猛发展,计算机通信给人类文明带来了翻天覆地的变化。很多情况下,人们的日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备或Internet上的服务器才能实现。这就给那些具有大规模内部网络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具,在内部网络中实现文件交换。1.2国内外研究现状目前,国内外企业对局域网的文件传输系统认识和使用情况并不好,各个企业单位在局域网内实现文件传输,资源共享还有很大的缺陷。技术无论是从理论上或实践上都还不够完善。文件传输系统由于比较复杂,可变因素较多,安全性低,因此发展还不成熟。但是随着科学技术的发展,各种以局域网为单位的文件传输系统已经进入稳健发展期,比如说市面上比较普遍使用的QQ、UC、飞鸽传书等以内部网络为中心的资源共享系统也即将进入高速发展期。在国内,随着企业资源管理的规范化和规模的不断扩大,企业的计算机资源管理将不仅仅停留在依靠硬件或者Internet网络获取,而且将会向着安全的内部网络化资源管理方式迈进。1.3课题研究的意义随着网络通信技术的发展与用户需求日益多样化,现代局域网络正处在变革与发展之中,本课题的主要目的之一是为了更清晰地培养学生掌握科学研究方法的能力和使学生迅速体会文件传输系统的研发过程。基于局域网的文件传输系统能够让家庭网络以及各个企业等局域网对内部资料有一个快捷,准确,安全的共享。特别是对如今较大系统研发的模块分工合作得到了绝对保密性,从而使各项工作有计划、更科学的进行及顺利完成,使企业的办事效率得到显著提高。文件传输系统主要功能是自动获取局域网内用户的主机名,IP地址以及工作组名字,最终以C/S模式通过TCP/IP协议实现点到点文件传输功能。本系统既锻炼了我们的实际动手能力,使我们将大学四年所学的理论知识与实际开发相结合,又引导我们进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重要的意义。 1.4本文主要研究内容计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以 JPEG 格式保存并且文件扩展名为 .jpg)。文件传输需要经过两个步骤,一是网络的链接;二是文件的传输。本文提出的方案主要是在满足局域网内链路状态良好,IP地址已知的条件下的文件传输。2 系统需求分析2.1现行业务系统描述目前各种文件资源交流的主要方式可以分为三种:(1)通过局域网内主机之间以文件共享后再经过复制,粘贴方式实现。(2)依靠可移动磁盘的两次信息转移实现。(3)通过Internet邮件方式实现。此三种方法并非不可行,但它们都需要花费较长的时间以及安全性也得不到保证,工作效率将在很大程度上受到限制。如果通过局域网内主机之间复制粘贴来实现文件资源共享,将浪费大量的网络带宽,极大程度上影响了网内用户的工作效率,甚至导致用户不能正常工作;如果依靠移动磁盘实现文件的共享,将花费大量的金钱,而文件较大移动磁盘容量不足的情况下会令人极为头疼,何况移动磁盘是病毒传播的重要途径;如果通过Internet邮件方式实现,用户需要接入Internet服务器,这种方式对远程服务器有非常大的依赖性,即使1KB的文件都要经历极度繁琐的路径,不能彻底实现点对点的即时交流,文件较大的情况下就不言而喻了。最重要的是,在如今病毒黑客横行的网络世界中,信息的安全性也得不到保证。 综上所述,依靠Internet网络等方式实现文件资源交互的准确性,快速性及安全性远达不到理想的要求。2.2现行系统主要存在的问题分析针对企业来说,提高工作效率是企业的一个重心;降低成本是企业赢取最大利益的重要方式;保证信息安全却是可能影响企业生死存亡的关键。企业需要对各种因素有足够深刻的认识才可能实现最终目标-盈利。而传统的文件资源交互方式却存在很多的问题,大致可以分为:一、不能有效地降低文件交互成本;二、文件交换过程过于繁琐;三、内部机密资料得不到安全保证;四、文件交互的准确性得不到根本保证。2.3提出解决方案解决当前问题的方案主要是指在允许的成本、性能要求下,分析系统实施的可行性,提出功能实现的依据,包括其简单性,安全性以及经济可行性。根据企业简单快速,安全的资源共享等要求,提出以下四种解决方案:1)操作简单性方案:开发的系统需要有以下特点:Windows友好的用户界面和系统快速的应用方法,简单易操作,不需对使用人员进行培训,可以使用户很好的掌握。对传输文件过程中的文件的载入设置都是非常简单可行,比如:如果用户忘记选择文件接收者的时候系统会自动提示“请选择接收用户”要求用户选择主机而不导致错误出现而引发的不便,这样就大大提高工作效率。而且开发的系统应该简单易操作,易维护,减少了不必要的麻烦。对于家庭局域网以及一些比较简单的中小企业网,系统必须做到在实际应用中较为成功。系统应为用户提供Windows所一贯坚持的非常友好、操作简单的用户界面。2)传输安全性方案:系统开发完成后,能有效地使内部资源与外网的完全隔离,从而保证了内部机密文件的安全性。3)经济可行性方案:系统开发完成必须作到提高文件共享效率,不管是在资金上还是效率上都能达到预期的效果的。最重要的一点就是:使用户避免花费高额的资金去购买各种移动磁盘甚至是通过Internet邮件方式,使得用户方便的同时,也让信息少走了不少“弯路”。4)快速准确性方案:鉴于系统的目标要求和特点,能够保证快速准确地实现文件共享。综合上述,本设计在Windows XP操作系统下,以中文版c+6.0为开发工具,以C/S为系统功能结构,基于点对点的TCP/IP协议理论,通过Socket套节字连接客户端与服务器实现文件及文件夹传输。彻底避免了文件交换过程与外部网络的接触,实现快速的文件资源共享。并能够确保内部文件的机密性,能够在很大程度上有效地提高工作效率。3 TCP/IP协议3.1开放式系统互连参考模型TCP/IP 是Transmission Control Protocol/Internet Protocol 的简写,中文译名为传输控制协议/互联网协议,是当今世界上最广而不基于任何特定硬件平台的网络通信协议.采用TCP/IP 可以解决异种机联网和异种网互连的问题,并可以访问当今世界上最有影响力的Internet 网TCP/IP 协议的基本思想,是通过网间连接层将各种不同的网络连接起来,在各个网络的底层协议之上构造一个虚拟的大网,使用户与其他网的通讯就像与本网的主机通讯一样方便实现,这一思想的相关协议有TELNET、FTP、SMTP、TCP、UDP、IP、ICMP、ARP、RARP 等。TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层(主机-网络层):接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。 3.2 TCP/IP技术TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中文译名为传输控制协议/互联网协议,是当今世界上最广而不基于任何特定硬件平台的网络通信协议。采用TCP/IP可以解决异种机联网和异种网互连的问题,并可以访问当今世界上最有影响力的Internet网。TCP/IP协议的基本思想是通过网间连接层将各种不同的网络连接起来,在各个网络的底层协议之上构造一个虚拟的大网,使用户与其他网的通讯就像与本网的主机通讯一样方便实现,这一思想的相关协议有TELNET、FTP、SMTP、TCP、UDP、IP、ICMP、ARP、RARP等。3.2.1 TCP/IP体系结构 TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议(结构如图3-1所示): 图3-1 TCP/IP协议体系结构IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ARP: 地址解析协议(Address Resolution Protocol)此协议将网络地址映射到硬件地址。RARP: 反向地址解析协议(Reverse Address Resolution Protocol)此协议将硬件地址映射到网络地址。ICMP: 网间报文控制协议(Internet Control Message Protocol)此协议处理信关和主机的差错和传送控制。TCP: 传送控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP)。UDP: 用户数据报协议(User Datagram Protocol)这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。FTP: 文件传输协议(File Transfer Protocol)允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。SMTP: 简单邮件传送协议(Simple Mail Transfer Protocol)SMTP协议为系统之间传送电子邮件。TELNET:终端协议(Telnet Terminal Protocol)允许用户以虚终端方式访问远程主机。HTTP: 超文本传输协议(Hypertext Transfer Protocol)。是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少TFTP: 简单文件传输协议(Trivial File Transfer Protocol)。它是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。3.2.2 IP协议网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层-TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫做IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好像是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。3.2.3 TCP协议 TCP/IP特点TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现,因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(Socket)来实现,下图3-2就是反映TCP/IP协议核心与应用程序的关系。 图3-2 TCP/IP协议的核心与应用程序关系3.2.4 TCP/IP传送文件机制 下面以采用TCP/IP协议传送文件为例,说明TCP/IP的工作原理,其工作流程如下: (1)在源主机上,应用层将一串应用数据流传送给传输层。 (2)传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。 (3)在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。(4)链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。 (5)在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。 (6)网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。(7)传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。 (8)在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。4 Socket网络程序设计技术4.1 Socket编程文件传输系统得以实现的根本在于建立有效的连接以及是否存在文件传输载体。所谓Socket通常也称作"套接字",用于描述IP地址和端口,socket类表现了客户端套接字,它是属于两台计算机的两个TCP通讯端口之间的通讯通道。在网络编程中,客户端使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口。服务器使用Socket监听指定的端口,端口可以随意指定,等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。4.1.1 Winsock简介以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套microsoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出所有的 Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。 为了方便网络编程,Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输和接收的信息都通过这个Socket接口来实现。 Winsock规范定义了一套可使网络程序开发人员在Windows下开发标准的TCP/IP网络程序接口,它不仅包含人们所熟悉的Berkeley Socket风格的库函数,还包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制、异步网络事件选择方式进行编程。Winsock规范定义并记录了任何使用API与Internet通讯协议(ISP通常指TCP/IP)连接。应用程序使用Windows Sockets的API,而Windows Sockets又利用下层的网络通信协议与操作系统以产生实际的通信,它们之间的关系如下图4-1所示。 图4-1 应用程序与windows sockets 关系图4.1.2 Winsock通信机制应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输,应用程序和Winsock都工作在Windows的用户模式下,操作系统仅仅通过Winsock是不能完成网络间的通信,还需要底层的支持,而套接字仿真器(套接字核心模式驱动程序)和传输驱动程序接口(Transport Driver Interface,TDI)是负责操作系统核心态环境下的网络通信,起到了Winsock和传输协议之间的通信桥梁作用。如图4-2所示,Winsock是网络通信应用程序于套接字仿真器间的接口,TDI是套接字仿真器和传输协议间的接口套接字核心模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在AFDSYS文件中实现),同时负责与底层传输驱动程序对话传输驱动程序接口(TDI)负责核心模式驱动程序与传输协议间的通信。 图4-2 套接字通信机制示意图当应用程序利用Winsock发送和接受数据时,并不是由Winsock从网络上发送和接收数据的,而是由核心模式驱动程序AFDSYS负责管理发送和接收缓冲区来发送和接收数据。也就是说,当应用程序调用send或WSASend函数来发送数据时,AFDSYS将把数据复制进他自己的发送缓冲区,然后send后WSASend函数立即返回AFDSYS在后台负责把数据发送出去,远程客户端接收数据的情况也类似,由接收方的AFDSYS在后台负责把数据复制到自己的接收缓冲区,然后当应用程序调用recv后WSARecv函数来接收数据时,把数据由AFDSYS管理的接收缓冲区复制到应用程序提供的缓冲区中。 AFDSYS管理的发送缓冲区SO-SNDBUF和接收缓冲区SO-RCVBUF在缺省时两个缓冲区的大小都为8192个字节,但可以根据实际要求由应用程序设定,由于我们传输的对象可能是大数据量文件,因此需要对系统的发送缓冲区和接收缓冲区作相应的设定,以保障大数据量的文件数据的发送和接收。Sockets的实质是通信端点的一种抽象,它提供一种发送和接受数据的机制。根据通信性质不同可分为:Stream Sockets(流式套接字)和Datagram Sockets(数据报套接字),如图4-3所示为这两种套接字的基本通信方式。其中Stream Sockets提供无差错的、面向连接的、无长度限制的双向字节流传输,适应于处理大量数据,尤其适合于FTP服务。Datagram Sockets支持双向的数据传输、但传输过程中不能保证可靠性和无差错性;本设计的程序设计中选择Stream Sockets来完成C/S模式的通信,保证能够数据准确、无误的传输。 图4-3 Socket的两种通信方式4.1.3 Winsock编程模型a建立一个Socket 为了建立Socket,程序调用Socket函数如下: Sockethandle=Socket(“协议簇”,“Socket类型”,“协议”);Winsock函数含有三个参数,“协议簇”参数指明像TCP/IP协议组这样的一组相关协议,“Socket类型”参数指明参数指明程序是进行数据报传输还是字节流传输,“协议”参数定义了协议族内程序欲使用的具体协议(如TCP或UDP)。 由于编程时必须指定程序使用的协议簇,因而能够为使用不同协议组和地址格式的网络建立相同的接口。也就是说,本函数的正确调用可使Winsock接口运行在多个网络上。下面语句显示了一个典型的具体Winsock函数调用:Sockethandle=Socket(PFINET,SOCKSTREAM,IPPROTOTCP); 这个Winsock使用Internet协议簇(PFINET)的TCP协议(IPPROTOTCP)进行字节流(SOCKSTREAM)通信。当程序调用Winsock函数建立一个新Socket时,Winsock将为一个内部数据结构分配内存,此结构中保存有关此Socket的信息。b.配置一个Socket程序可使用Winsock中不同的函数来配置一个Socket。每个Socket需要五种信息:本地和远地本机的IP地址、本地和远地进程的协议端口、连接使用的协议。 面向连接的协议在连接端点之间建立一条虚电路,面向连接的客户程序不必关心网络软件使用怎样的本地地址传输数据。建立好连接后,客户程序依靠TCP协议给它传送数据。因此面向连接的客户程序不需指明本地协议端口,它提供给Socket的唯一地址信息是远地服务器信息(IP地址和协议端口)。Winsock自动保存本地IP地址和选择本地协议端口,并确保客户程序收到传输层送给本地协议端口的所有数据。也就是说,Winsock为程序选择协议端口,当数据到达此端口时通知程序,程序不必关心Winsock使用哪一个协议端口。在前一步已建立的Socket基础上,面向连接的客户程序使用connect函数来配置Socket。result=connect(“Socket句柄”,“远地Socket地址”,“远地Socket地址”);此时,内部数据结构就包含了网络通信必须的五种信息。只有面向连接的客户进程才启动与远地服务器Socket的直接连接。无连接协议不建立与远地服务器的直接连接。使用无连接协议的客户程序必须发送一个带有服务请求的数据报并等待应答,远地服务器的应答以数据报的形式到达。Winsock用bind函数给Socket指定一个本地IP地址和一个协议端口,其典型调用如下:result=bind(“Socket句柄”,“本地Socket地址”,“本地Socket地址长度”);服务器程序使用bind函数用Winsock登记一个协议端口,程序告诉Winsock监视哪一个协议端口的数据传送,Winsock接着告诉传输层将此协议端口收到的数据传送给Winsock。c.使用Socket配置好一个Socket后,程序就能够使用Winsock在网络上传送和接收数据了。Winsock有四个函数:两个用于数据传送(send、sendto),两个用于数据接收(recv、recvfrom)。由于send和recv函数不能指定目的地址,只能用于面向连接的Socket,其典型调用过程为:result=send(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”); Winsock将从Socket句柄确定的内部Socket数据结构中获取目的地址信息,接着send函数将传送报文缓冲区中的数据,这些数据将被传送到Winsock内部Socket数据结构中指明的网络地址中去。recv函数与之相对应,其调用过程为: result=recv(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”); 程序在无连接的Socket上使用sendto和recvfrom函数,其使用如下:result=sendto(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”,“Socket地址结构”,“地址结构长度”); result=recvfrom(“Socket句柄”,“报文缓冲区”,“缓冲区长度”,“特殊标志”,“Socket地址结构”,“地址结构长度”); sendto函数在Winsock的内部数据结构中保存远地服务器信息,在程序调用sendto函数之前,必须在一个Socket数据结构中保存远地服务器信息,程序将此地址结构的指针传递给sendto函数。当Winsock需要传输层传送sendto报文缓冲区中的数据时,Winsock将其内部数据结构保存的信息传送给传输层,传输层使用此数据结构中的信息格式化UDP数据报头,并将此数据通过网络传送。使用recvfrom函数的服务器需要分离出发送者的地址,客户程序使用recvfrom函数时,如果客户想继续进行网络对话,就需要分离出发送者的地址。 “特殊标志”参数使用符号常数MSGOOB作为标志值,表示可以从协议端口请求带外数据。带外数据是程序必须立即处理的紧急数据,如存在