• / 23
  • 下载费用:10 金币  

C#网络编程-4.doc

关 键 词:
C#网络编程-4.doc
资源描述:
C#网络编程(订立协议和发送文件) - Part.4文件传输前面两篇文章所使用的范例都是传输字符串,有的时候我们可能会想在服务端和客户端之间传递文件。比如,考虑这样一种情况,假如客户端显示了一个菜单,当我们输入S1、S2 或 S3(S 为 Send 缩写)时,分别向服务端发送文件Client01.jpg、Client02.jpg、Client03.jpg;当我们输入 R1、R2 或 R3 时(R 为 Receive缩写),则分别从服务端接收文件 Server01.jpg、Server02.jpg、Server03.jpg。那么,我们该如何完成这件事呢?此时可能有这样两种做法:类似于 FTP 协议,服务端开辟两个端口,并持续对这两个端口侦听:一个用于接收字符串,类似于 FTP 的控制端口,它接收各种命令(接收或发送文件);一个用于传输数据,也就是发送和接收文件。 服务端只开辟一个端口,用于接收字符串,我们称之为控制端口。当接到请求之后,根据请求内容在客户端开辟一个端口专用于文件传输,并在传输结束后关闭端口。 现在我们只关注于上面的数据端口,回忆一下在第二篇中我们所总结的,可以得出:当我们使用上面的方法一时,服务端的数据端口可以为多个客户端的多次请求服务;当我们使用方法二时,服务端只为一个客户端的一次请求服务,但是因为每次请求都会重新开辟端口,所以实际上还是相当于可以为多个客户端的多次请求服务。同时,因为它只为一次请求服务,所以我们在数据端口上传输文件时无需采用异步传输方式。但在控制端口我们仍然需要使用异步方式。从上面看出,第一种方式要好得多,但是我们将采用第二种方式。至于原因,你可以回顾一下 Part.1(基本概念和操作)中关于聊天程序模式的讲述,因为接下来一篇文章我们将创建一个聊天程序,而这个聊天程序采用第三种模式,所以本文的练习实际是对下一篇的一个铺垫。1.订立协议1.1 发送文件我们先看一下发送文件的情况,如果我们想将文件 client01.jpg 由客户端发往客户端,那么流程是什么:1. 客户端开辟数据端口用于侦听,并获取端口号,假设为 8005。 2. 假设客户端输入了 S1,则发送下面的控制字符串到服务端:[file=Client01.jpg, mode=send, port=8005]。 3. 服务端收到以后,根据客户端 ip 和端口号与该客户端建立连接。 4. 客户端侦听到服务端的连接,开始发送文件。 5. 传送完毕后客户端、服务端分别关闭连接。 此时,我们订立的发送文件协议为:[file=Client01.jpg, mode=send, port=8005]。但是,由于它是一个普通的字符串,在上一篇中,我们采用了正则表达式来获取其中的有效值,但这显然不是一种好办法。因此,在本文及下一篇文章中,我们采用一种新的方式来编写协议:XML。对于上面的语句,我们可以写成这样的 XML:这样我们在服务端就会好处理得多,接下来我们来看一下接收文件的流程及其协议。NOTE:这里说发送、接收文件是站在客户端的立场说的,当客户端发送文件时,对于服务器来收,则是接收文件。1.2 接收文件接收文件与发送文件实际上完全类似,区别只是由客户端向网络流写入数据,还是由服务端向网络流写入数据。1. 客户端开辟数据端口用于侦听,假设为 8006。 2. 假设客户端输入了 R1,则发送控制字符串:到服务端。 3. 服务端收到以后,根据客户端 ip 和端口号与该客户端建立连接。 4. 客户端建立起与服务端的连接,服务端开始网络流中写入数据。 5. 传送完毕后服务端、客户端分别关闭连接。 2.协议处理类的实现和上面一章一样,在开始编写实际的服务端客户端代码之前,我们首先要编写处理协议的类,它需要提供这样两个功能:1、方便地帮我们获取完整的协议信息,因为前面我们说过,服务端可能将客户端的多次独立请求拆分或合并。比如,客户端连续发送了两条控制信息到服务端,而服务端将它们合并了,那么则需要先拆开再分别处理。2、方便地获取我们所想要的属性信息,因为协议是 XML 格式,所以还需要一个类专门对 XML 进行处理,获得字符串的属性值。2.1 ProtocalHandler 辅助类我们先看下 ProtocalHandler,它与上一篇中的 RequestHandler 作用相同。需要注意的是必须将它声明为实例的,而非静态的,这是因为每个 TcpClient 都需要对应一个ProtocalHandler,因为它内部维护的 patialProtocal 不能共享,在协议发送不完整的情况下,这个变量用于临时保存被截断的字符串。public class ProtocolHandler {private string partialProtocal; // 保存不完整的
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:C#网络编程-4.doc
链接地址:https://www.weizhuannet.com/p-9828346.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

微传网博客

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开