logo资料库

基于socket的文件传输软件的设计与实现.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
1.概述
2.系统体系结构
2.1面向TCP系统调用时序图
2.2面向UDP系统调用时序图
3.功能实现
3.1公共类设计
3.1.1 IP地址操作类
3.1.2 DNS相关类
3.2 TCP文件传输
3.2.1 服务器端
3.2.2 客户端
3.3 UDP文件传输
3.3.1 服务器端
3.3.2 客户端
3.4线程池
3.5其它
4.试验结果
5.思考
6.结论和收获
哈尔滨工业大学课程结业报告 姓 学 名: 号: 所学专业: 课程名称: 提交日期: 陈 琳 09S003158 计算机科学与技术 网络程序设计 2009-12-20
目录 1.基于 TCP/IP 及 UDP 的通信传输概述 .................................. 1 2.系统体系结构………………………………………………………………………3 2.1 面向 TCP 连接系统调用过程 .................................... 4 2.2 面向 UDP 连接系统调用过程 .................................... 5 3.系统要求与功能实现 ............................................... 5 3.1 公共类设计 .................................................. 5 3.1.1 IP 地址操作类 ..........................................5 3.1.2 DNS 相关类 .............................................6 3.2 TCP 文件传输 ................................................ 7 3.2.1 服务器端 .............................................. 7 3.2.2 客户端 ................................................ 8 3.3 UDP 文件传输 ................................................ 9 3.3.1 服务器端 ............................................. 10 3.3.2 客户端 ............................................... 11 3.4 线程池 ..................................................... 11 3.5 其它 ....................................................... 12 4.试验结果 ........................................................ 12 5.思考 ........................................................... 14 6.结论和收获 ..................................................... 15 基于 socket 套接字的文件传输软件的设计与实现 1. 概述 TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译 名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是 Internet 1
最基本的协议、Internet 国际互联网络的基础,简单地说,就是由网络层的 IP 协议和传输层的 TCP 协议组成的。TCP/IP 协议使用范围极广,是目前异种网络 通信使用的唯一协议体系,适用于连接多种机型,既可用于局域网,又可用于广 域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有 TCP/IP 协 议。TCP/IP 协议已成为目前事实上的国际标准和工业标准。基于 TCP/IP 协议组 的网络模型分为应用层、传输层、网络层、链路层和物理层这样五个层次。TCP/IP 协议组位于应用程序和硬件之间,指挥数据在网络各层中传递。其中传输层的协 议包括传输控制协议(TCP)和用户数据报协议(UDP) ,它们都建立在 IP 协议的基 础上,其中 TCP 提供可靠的面向连接服务,UDP 提供简单的无连接服务。传输层 提供端到端,即应用程序之间的通信,主要功能是数据格式化、数据确认和丢失 重传等。TCP 协议是面向连接的协议,它提供可靠的字节流服务,在进行数据传输 之前必须先建立连接,经三次握手确定后才开始数据传送。UDP 进行数据报传输 使用的是不可靠、无连接的协议。网络层包括互连网协议 IP,互连网控制报文 协议 ICMP 和互连网组管理协议 IGMP。其中 IP 协议完成大部分的工作,负责数 据传输和路由的选择等。I P 报头中的地址和网卡相联系( 具体还涉及地址解析 和反向地址解析协议),TCP 、UDP 报头中的端口号侧对应着网络主机上不同的 程序。TCP/IP 体系结构如图一所示: 2
图一 TCP/IP 体系结构 Socket 通常也称作"套接字",用于描述 IP 地址和端口,是一个通信链的句 柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket 接 口是 TCP/IP 网络的 API,Socket 接口定义了许多函数或例程,程序员可以用它 们来开发 TCP/IP 网络上的应用程序。尽管 TCP/IP 协议的名称中只有 TCP 这个协 议名,但是在 TCP/IP 的传输层同时存在 TCP 和 UDP 两个协议。 TCP 是一种面向连接的保证可靠传输的协议。通过 TCP 协议传输,得到的是 一个顺序的无差错的数据流。发送方和接收方的成对的两个 socket 之间必须建 立连接,以便在 TCP 协议的基础上进行通信,当一个 socket(通常都是 server socket)等待建立连接时,另一个 socket 可以要求进行连接,一旦这两个 socket 连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。 UDP 是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源 地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的 地,到达目的地的时间以及内容的正确性都是不能被保证的。 本文在 Scoket 原理基础上,基于.NET 平台,利用线程池技术,设计并实现 了分别面向 TCP 和 UDP 的可靠文件传输软件。 2. 系统体系结构 根据采用的协议不同,本软件分为基于 TCP 文件传输和基于 UDP 的可靠文 件传输。在 TCP/IP 网络中两个进程间的相互作用的主机模式是 C/S。在操作过 程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务: 1、打开一通信通道并告知本地主机,它在某一个公认地址上接收客户请求; 2、等待客户请求到达该端口; 3、接收到重复服务请求,处理该请求并发送应答信号; 4、返回第 2 步,等待另一客户请求; 5、关闭服务器。 客户端: 3
1、打开一通信通道,并连接到服务器所在主机的特定端口; 2、向服务器发送服务请求报文,等待并接收应答;继续提出请求…… 3、请求结束后关闭通信通道并终止。 2.1 面向 TCP 系统调用时序图 图二 面向 TCP 的系统时序图 4
2.2 面向 UDP 系统调用时序图 图三 面向 UDP 的系统时序图 3.功能实现 3.1 公共类设计 软件设计时,TCP 和 UDP 的服务器端为统一界面,客户端为统一界面。即服 务器端既能够接受 TCP 连接,也能通过 UDP 进行接收;客户端可以通过 TCP 和 UDP 进行传输。 3.1.1 IP 地址操作类 1、IPAddress 类 在该类中有一个 Parse()方法,可以把点分的十进制 IP 表示转化 IPAddress 类,方法如下: IPAddress address = IPAddress.Parse(“192.168.100.39”); IPAddress 提供 4 个只读字段 Any 用于代表本地系统可用的任何 IP 地址 Broadcase 用于代表本地网络的 IP 广播地址 5
Loopback 用于代表系统的回送地址 None 用于代表系统上没有网络接口 其中 IPAddress.Any 最常用可以用来表示本机上所有的 IP 地址,这对于 socket 服务进行侦听时便使用,不用对每个 IP 进行侦听了。 2、IPEndPoint 类 通过二种构造方法来创建 IPEndPoint 类: a、IPEndPoint(long address, int port) b、IPEndPoint(IPAddress address, int port) 它有四个属性: Address AddressFamily Port MaxPort MinPort IPEndPoint 是一个 IP 地址和端口的绑定,可以代表一个服务,用来 Socket 通讯。 3.1.2 DNS 相关类 DNS 类有四个静态方法,来获取主机 DNS 相关信息: 1、GetHostName() 通过 Dns.GetHostName()可以获得本地计算机的主机名 2、GetHostByName() 根据主机名称,返回一个 IPHostEntry 对象: IPHostEntry GetHostByName(string hostName)。其中 IPHostEntry 把一个 DNS 主机名与一个别名和 IP 地址的数组相关联,包含三个属性: AddressList:一个 IPAddress 对象的数组 Aliases:一个字符串对象数组 HostName:一个用于主机名的字符串对象 3、GetHostByAddress() 类似于 GetHostByName(),只不过这里的参数是 IP 地址,而不是主机名, 也返回一个 IPHostEntry 对象。 IPHostEntry GetHostByAddress(IPAddress address) IPHostEntry GetHostByAddress(string address) 6
4、Resolve() 当不知道输入的远程主机的地址是哪种格式时(主机名或 IP 地址),用 以上的二种方法来实现,可能还要通过判断客户输入的格式,才能正确使用,但 Dns 类提供一更简单的方法 Resolve(),该方法可以接受或者是主机名格式或者 是 IP 地址格式的任何一种地址,并返回 IPHostEntry 对象。 3.2 TCP 文件传输 3.2.1 服务器端 1、创建 IPEndPoint 实例,用于 Socket 侦听时绑定: IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 7000); 2、创建套接字实例: serverSocket = new Socket(AddressFamily.InterNetwork, SocketT ype.Stream, ProtocolType.Tcp); 这里创建的时候用 ProtocolType.Tcp, 表示建立一个面向连接(TCP)的 Socket。 3、将所创建的套接字与 IPEndPoint 绑定: serverSocket.Bind(ipep)。 4、设置套接字为收听模式: serverSocket.Listen(10)。 5、在套接字上接收接入的连接 在此使用.net 的线程池类,默认情况下创建 25 个线程。从线城池中获取一 个线程来处理客户端请求。ThreadPool.QueueUserWorkItem。 6、在套接字上接受客户端发送的信息 部分代码: BinaryReader reader = new BinaryReader(client.GetStream()); string filename = reader.ReadString(); long total = reader.ReadInt64(); string saveAs = GetSaveFile(filename); FileStream fs = File.Create(saveAs); try { byte[] buffer = new byte[8192]; 7
分享到:
收藏