Part4
文件传输
前面两篇文章所使用的范例都是传输字符串,有的时候我们可能会想在服务端和客户端之间传递文件。比如,考虑这样一种情况,假如 客户端显示了一个菜 单,当我们输入 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(基本概念和操作)中关于聊天程 序模式的讲述,因为接下来一篇文章我们将创建一个聊天程序,而这个聊天程序采用第三种模式,所以本文的练习实际是对下一篇的一 个铺垫。
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
Socket 张国生