通信工程毕业设计(论文)-基于局域网的文件传输系统的设计与实现.doc_第1页
通信工程毕业设计(论文)-基于局域网的文件传输系统的设计与实现.doc_第2页
通信工程毕业设计(论文)-基于局域网的文件传输系统的设计与实现.doc_第3页
通信工程毕业设计(论文)-基于局域网的文件传输系统的设计与实现.doc_第4页
通信工程毕业设计(论文)-基于局域网的文件传输系统的设计与实现.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计本科毕业设计(论文论文) 题目:基于局域网的文件传输系统的题目:基于局域网的文件传输系统的 设计与实现设计与实现 院院 (系):(系): 电子信息工程学院电子信息工程学院 专专 业:业: 通信工程通信工程 班班 级:级: 080408 班班 学学 生:生: 学学 号:号: 指导教师:指导教师: 2012 年 06 月 i 基于局域网的文件传输系统的设计与实现基于局域网的文件传输系统的设计与实现 摘要摘要 在这个信息化时代,计算机网络技术的迅猛发展影响了几乎包括政治、文 化、生活、经济在内的每一个角落,推动了人类社会向信息化社会的逐步转变; 同时我们也应该清醒地认识到文件传输的问题是计算机网络发展过程中的一个 不容忽视的问题。在如今拥塞的网络上,各种数据在争夺着网络资源,如何使 传输的文件更加可靠的到达目的地,同时如何友好的解决文件分类分组高效传 输等问题都是需要有待提高和完善的地方。很多情况下,人们的日常工作需要 借助文件传输来完成。但大多数文件传输功能都需要借助移动磁盘等硬件设备 或 internet 上的服务器才能实现。这就给那些具有大规模内部网络的用户造成 了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工作效率等。为 了方便局域网内主机的资源共享,需要开发一个基于局域网的文件传输工具, 在内部网络中实现文件交换。 本文件传输系统的设计选用 vc+6.0 为开发工具,以 c/s 模式通过建立 socket 连接后实现局域网快速,准确,安全的点对点文件传输功能。本系统能 够促进局域网内用户之间的文件资源共享,满足主机之间信息交流,确保文件 传输安全性,有效地提高工作效率。 关键字:套接字;网络编程;关键字:套接字;网络编程;c/s 模式;模式;tcp/ip ii design and implementation of file transfer system based on local area network abstract 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 todays 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, peoples 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 iii 目录目录 摘要摘要 i abstract.ii 1 绪论绪论1 1.1 前言1 1.2 国内外研究现状1 1.3 课题研究的意义1 1.4 本文主要研究内容2 2 系统需求分析系统需求分析3 2.1 现行业务系统描述3 2.2 现行系统主要存在的问题分析3 2.3 提出解决方案3 3 tcp/ip 协议协议5 3.1 开放式系统互连参考模型5 3.2 tcp/ip 技术 .5 3.2.1 tcp/ip 体系结构 6 3.2.2 ip 协议.7 3.2.3 tcp 协议 tcp/ip 特点7 3.2.4 tcp/ip 传送文件机制 8 4 socket 网络程序设计技术网络程序设计技术 10 4.1 socket编程.10 4.1.1 winsock 简介10 4.1.2 winsock 通信机制11 iv 4.1.3 winsock 编程模型13 4.2 主要函数介绍15 4.3 c/s 构架 .20 4.3.1 c/s 构架软件的优势与劣势 20 5 软件开发软件开发22 5.1 程序功能分析22 5.2 系统总体架构22 5.3 设计流程图22 5.4 系统功能模块设计25 5.4.1 软件设计 .25 5.4.2 服务器模块 .25 5.4.3 客户端模块 .28 6 软件实现与测试软件实现与测试30 6.1 实验运行情况实验运行情况30 7 总结总结34 致致 谢谢35 参考文献参考文献36 毕业设计(论文)知识产权声明毕业设计(论文)知识产权声明38 毕业设计(论文)独创性声明毕业设计(论文)独创性声明39 附录:外文翻译附录:外文翻译40 1 绪论 1 1 绪论绪论 1.1 前言前言 当今世界科学技术飞速发展,尤其以计算机通信网络为代表的互联网技术 更是日新月异,令人眼花燎乱,目不睱接。在计算机与网络迅速发展的今天, 借助于网络进行信息资源交流给人们带来了极大的方便。随着互联网技术的迅 猛发展,计算机通信给人类文明带来了翻天覆地的变化。很多情况下,人们的 日常工作需要借助文件传输来完成。但大多数文件传输功能都需要借助移动磁 盘等硬件设备或 internet 上的服务器才能实现。这就给那些具有大规模内部网 络的用户造成了许多问题,如浪费资金、浪费网络资源、病毒入侵、降低了工 作效率等。为了方便局域网内主机的资源共享,需要开发一个基于局域网的文 件传输工具,在内部网络中实现文件交换。 1.2 国内外研究现状国内外研究现状 目前,国内外企业对局域网的文件传输系统认识和使用情况并不好,各个 企业单位在局域网内实现文件传输,资源共享还有很大的缺陷。技术无论是从 理论上或实践上都还不够完善。文件传输系统由于比较复杂,可变因素较多, 安全性低,因此发展还不成熟。 但是随着科学技术的发展,各种以局域网为单位的文件传输系统已经进入 稳健发展期,比如说市面上比较普遍使用的 qq、uc、飞鸽传书等以内部网络 为中心的资源共享系统也即将进入高速发展期。在国内,随着企业资源管理的 规范化和规模的不断扩大,企业的计算机资源管理将不仅仅停留在依靠硬件或 者 internet 网络获取,而且将会向着安全的内部网络化资源管理方式迈进。 1.3 课题研究的意义课题研究的意义 随着网络通信技术的发展与用户需求日益多样化,现代局域网络正处在变 革与发展之中,本课题的主要目的之一是为了更清晰地培养学生掌握科学研究 方法的能力和使学生迅速体会文件传输系统的研发过程。基于局域网的文件传 输系统能够让家庭网络以及各个企业等局域网对内部资料有一个快捷,准确, 安全的共享。特别是对如今较大系统研发的模块分工合作得到了绝对保密性, 从而使各项工作有计划、更科学的进行及顺利完成,使企业的办事效率得到显 著提高。文件传输系统主要功能是自动获取局域网内用户的主机名,ip 地址以 及工作组名字,最终以 c/s 模式通过 tcp/ip 协议实现点到点文件传输功能。本 系统既锻炼了我们的实际动手能力,使我们将大学四年所学的理论知识与实际 开发相结合,又引 西安工业大学毕业设计(论文) 2 导我们进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重 要的意义。 1.4 本文主要研究内容本文主要研究内容 计算机文件属于文件的一种,与普通文件载体不同,计算机文件是以计算 机硬盘为载体存储在计算机上的信息集合。文件可以是文本文档、图片、程序 等等。文件通常具有三个字母的文件扩展名,用于指示文件类型(例如,图片 文件常常以 jpeg 格式保存并且文件扩展名为 .jpg) 。文件传输需要经过两个 步骤,一是网络的链接;二是文件的传输。本文提出的方案主要是在满足局域 网内链路状态良好,ip 地址已知的条件下的文件传输。 2 系统需求分析 3 2 系统需求分析系统需求分析 2.1 现行业务系统描述现行业务系统描述 目前各种文件资源交流的主要方式可以分为三种:(1)通过局域网内主机 之间以文件共享后再经过复制,粘贴方式实现。 (2)依靠可移动磁盘的两次信 息转移实现。 (3)通过 internet 邮件方式实现。此三种方法并非不可行,但它 们都需要花费较长的时间以及安全性也得不到保证,工作效率将在很大程度上 受到限制。 如果通过局域网内主机之间复制粘贴来实现文件资源共享,将浪费大量的 网络带宽,极大程度上影响了网内用户的工作效率,甚至导致用户不能正常工 作;如果依靠移动磁盘实现文件的共享,将花费大量的金钱,而文件较大移动 磁盘容量不足的情况下会令人极为头疼,何况移动磁盘是病毒传播的重要途径; 如果通过 internet 邮件方式实现,用户需要接入 internet 服务器,这种方式对远 程服务器有非常大的依赖性,即使 1kb 的文件都要经历极度繁琐的路径,不能 彻底实现点对点的即时交流,文件较大的情况下就不言而喻了。最重要的是, 在如今病毒黑客横行的网络世界中,信息的安全性也得不到保证。 综上所述,依靠 internet 网络等方式实现文件资源交互的准确性,快速性 及安全性远达不到理想的要求。 2.2 现行系统主要存在的问题分析现行系统主要存在的问题分析 针对企业来说,提高工作效率是企业的一个重心;降低成本是企业赢取最 大利益的重要方式;保证信息安全却是可能影响企业生死存亡的关键。企业需 要对各种因素有足够深刻的认识才可能实现最终目标-盈利。而传统的文件资 源交互方式却存在很多的问题,大致可以分为:一、不能有效地降低文件交互 成本;二、文件交换过程过于繁琐;三、内部机密资料得不到安全保证;四、 文件交互的准确性得不到根本保证。 2.3 提出解决方案提出解决方案 解决当前问题的方案主要是指在允许的成本、性能要求下,分析系统实施 的可行性,提出功能实现的依据,包括其简单性,安全性以及经济可行性。根 据企业简单快速,安全的资源共享等要求,提出以下四种解决方案: 1)操作简单性方案:开发的系统需要有以下特点:windows 友好的用户界 面和系统快速的应用方法,简单易操作,不需对使用人员进行培训,可以使用 户很好的掌握。对传输文件过程中的文件的载入设置都是非常简单可行,比如: 如 西安工业大学毕业设计(论文) 4 果用户忘记选择文件接收者的时候系统会自动提示“请选择接收用户”要求用 户选择主机而不导致错误出现而引发的不便,这样就大大提高工作效率。而且 开发的系统应该简单易操作,易维护,减少了不必要的麻烦。对于家庭局域网 以及一些比较简单的中小企业网,系统必须做到在实际应用中较为成功。系统 应为用户提供 windows 所一贯坚持的非常友好、操作简单的用户界面。 2)传输安全性方案:系统开发完成后,能有效地使内部资源与外网的完全 隔离,从而保证了内部机密文件的安全性。 3)经济可行性方案:系统开发完成必须作到提高文件共享效率,不管是在 资金上还是效率上都能达到预期的效果的。最重要的一点就是:使用户避免花 费高额的资金去购买各种移动磁盘甚至是通过 internet 邮件方式,使得用户方 便的同时,也让信息少走了不少“弯路” 。 4)快速准确性方案:鉴于系统的目标要求和特点,能够保证快速准确地实 现文件共享。 综合上述,本设计在 windows xp 操作系统下,以中文版 c+6.0 为开发工 具,以 c/s 为系统功能结构,基于点对点的 tcp/ip 协议理论,通过 socket 套 节字连接客户端与服务器实现文件及文件夹传输。彻底避免了文件交换过程与 外部网络的接触,实现快速的文件资源共享。并能够确保内部文件的机密性, 能够在很大程度上有效地提高工作效率。 3 tcp/ip 协议 5 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 协议的基本思想是通过网间 连接层将各种不同的网络连接起来,在各个网络的底层协议之上构造一个虚拟 3 tcp/ip 协议 6 的大 西安工业大学毕业设计(论文) 7 网,使用户与其他网的通讯就像与本网的主机通讯一样方便实现,这一思想的 相关协议有 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)这是提供给用户进程的无 西安工业大学毕业设计(论文) 8 连接协议,用于传送数据而不执行正确性检查。 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 协议核心与应用程序的关系。 西安工业大学毕业设计(论文) 9 应用程序1应用程序2 网络页面编程界面socket 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 报头,将排好顺序的分组组成应用数据 流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接 收来自源主机的字节流一样。 西安工业大学毕业设计(论文) 10 如果 ip 数据包中有已经封好的 tcp 数据包,那么 ip 将把它们向上传 送到 tcp 层。tcp 将包排序并进行错误检查,同时实现虚电路间的连接。tcp 数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包 可以被重传。tcp 将它的信息送到更高层的应用程序,例如 telnet 的服务程序 和客户程序。应用程序轮流将信息送回 tcp 层,tcp 层便将它们向下传送到 ip 层,设备驱动程序和物理介质,最后到接收方。面向连接的服务(例如 telnet、ftp、rlogin、x windows 和 smtp)需要高度的可靠性,所以它们使用 了 tcp。dns 在某些情况下使用 tcp(发送和接收域名数据库) ,但使用 udp 传送有关单个主机的信息。 西安工业大学毕业设计(论文) 11 4 socket 网络程序设计技术 12 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 来调用多种协议 4 socket 网络程序设计技术 13 的功能,但 西安工业大学毕业设计(论文) 14 较常使用的是 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 所示。 应用程序1应用程序2应用程序3 网络程序接口windows sockets 网络通信程序接口tcp/ip 操作系统 图 4.1 应用程序与 windows sockets 关系图 4.1.2 winsock 通信机制通信机制 应用程序的网络通信归根结底是利用相同的通信协议来完成信息的传输, 应用程序和 winsock 都工作在 windows 的用户模式下,操作系统仅仅通过 winsock 是不能完成网络间的通信,还需要底层的支持,而套接字仿真器(套 接字核心模式驱动程序)和传输驱动程序接口(transport driver interface,tdi)是负责操作系统核心态环境下的网络通信,起到了 winsock 和 传输协议之间的通信桥梁作用。如图 4.2 所示,winsock 是网络通信应用程序于 套接字仿真器间的接口,tdi 是套接字仿真器和传输协议间的接口套接字核心 西安工业大学毕业设计(论文) 15 模式,驱动程序复杂连接和缓冲区管理,以便向应用程序提供套接字仿真(在 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 模式的通信,保证能够数据准确、无误的传输。 西安工业大学毕业设计(论文) 16 server socket() bind() listen() accept blocks until connection from client read() process request write() client() socket() connect() writer() read() server socket() bind() recvfrom() blocks until data received from client process request send to() client() socket() bind() send to() recvfrom() 面向连接的流方式非连接的数据包方式 图 4.3 socket 的两种通信方式 4.1.3 winsock 编程模型编程模型 a建立一个建立一个 socket 为了建立 socket,程序调用 socket 函数如下: sockethandle=socket(“协议簇”, “socket 类型”, “协议”) ; 西安工业大学毕业设计(论文) 17 winsock 函数含有三个参数, “协议簇”参数指明像 tcp/ip 协议组这样的一组相 关协议, “socket 类型”参数指明参数指明程序是进行数据报传输还是字节流传输, “协议”参数定义了协议族内程序欲使用的具体协议(如 tcp 或 udp) 。 由于编程时必须指定程序使用的协议簇,因而能够为使用不同协议组和地 址格式的网络建立相同的接口。也就是说,本函数的正确调用可使 winsock 接 口运行在多个网络上。下面语句显示了一个典型的具体 winsock 函数调用: sockethandle=socket(pfinet,sockstream,ipprototcp) ; 这个 winsock 使用 internet 协议簇(pfinet)的 tcp 协议(ipproto tcp)进行字节流(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 西安工业大学毕业设计(论文) 18 配置好一个 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 作为标志值,表示可以从协议端 口请求带外数据。带外数据是程序必须立即处理的紧急数据,如存在带外数据, 函数立即将紧急数据返回给程序,如果没有带外数据,函数返回常数错误值 einval。若“特殊标志”参数使用符号常数 msgpeek 作为标志值,表 示可以对传输层输入队列中的数据进行分析。如果不需使用这两个标志,可将 “特殊标志”参数指定为 0。 4.2 主要函数介绍主要函数介绍 accept: 定义函数: int accept(int s,struct sockaddr * addr,int * addrlen); 函数说明: accept()用来接受参数 s 的 socket 连线。参数 s 的 socket 必需先经 bind()、 listen()函数处理过,当有连线进来时 accept()会返回一个新的 socket 处理代码, 西安工业大学毕业设计(论文) 19 往后的数据传送与读取就是经由新的 socket 处理,而原来参数 s 的 socket 能继 续使用 accept()来接受新的连线要求。连线成功时,参数 addr 所指的结构会被 系统填入远程主机的地址数据,参数 addrlen 为 scokaddr 的结构长度。 返回值: 成功则返回新的 socket 处理代码, 失败返回-1,错误原因存于 errno 中。 错误代码: ebadf 参数 s 非合法 socket 处理代码。 efault 参数 addr 指针指向无法存取的内存空间。 enotsock 参数 s 为一文件描述词,非 socket。 eopnotsupp 指定的 socket 并非 sock_stream。 eperm 防火墙拒绝此连线。 enobufs 系统的缓冲内存不足。 enomem 核心内存不足。 bind: 定义函数: int bind(int sockfd,struct sockaddr * my_addr,int addrlen); 函数说明: bind()用来设置给参数 sockfd 的 socket 一个名称。此名称由参数 my_addr 指向一 sockaddr 结构,对于不同的 socket domain 定义了一个通用的数据结构: struct sockaddr unsigned short int sa_family; char sa_data; ; 参数: sa_family 为调用 socket()时的 domain 参数,即 af_xxxx 值。 sa_data 最多使用 14 个字符长度。 此 sockaddr 结构会因使用不同 的 socket domain 而有不同结构定义。例如使用 af_inet domain, 其 socketaddr 结构定义便为: struct socketaddr_in unsigned short int sin_family; uint16_t sin_port; struct in_addr sin_addr; 西安工业大学毕业设计(论文) 20 unsigned char sin_zero; ; struct in_addr uint32_t s_addr; ; 参数: sin_family 即为 sa_family sin_port 为使用的 port 编号 sin_addr.s_addr 为 ip 地址 sin_zero 未使用。 addrlen 为 sockaddr 的结构长度。 返回值: 成功则返回 0, 失败返回-1,错误原因存于 errno 中。 错误代码: ebadf 参数 sockfd 非合法 socket 处理代码。 eaccess 权限不足 enotsock 参数 sockfd 为一文件描述词,非 socket。 listen: 定义函数: int listen(int s,int backlog); 函数说明: listen()用来等待参数 s 的 socket 连线。参数 backlog 指定同时能处理的最 大连接要求,如果连接数目

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论