订立协议
1. 发送文件
我们先看一下发送文件的情况,如果我们想将文件 client01.jpg 由客户端发往客户端,那么流程是什么:
- 客户端开辟数据端口用于侦听,并获取端口号,假设为 8005。
- 假设客户端输入了 S1,则发送下面的控制字符串到服务端:[file=Client01.jpg, mode=send, port=8005]。
- 服务端收到以后,根据客户端 ip 和端口号与该客户端建立连接。
- 客户端侦听到服务端的连接,开始发送文件。
- 传送完毕后客户端、服务端分别关闭连接。
此时,我们订立的发送文件协议为:[file=Client01.jpg, mode=send, port=8005]。但是,由于它是一个普通的字符串,在上一篇中,我 们采用了正则表达式来获取其中的有效值,但这显然不是一种好办法。因此,在本文及 下一篇文章中,我们采用一种新的方式来编写 协议:XML。对于上面的语句,我们可以写成这样的 XML:
<protocol><file name="client01.jpg" mode="send" port="8005" /></protocol>
这样我们在服务端就会好处理得多,接下来我们来看一下接收文件的流程及其协议。
NOTE:这里说发送、接收文件是站在客户端的立场说的,当客户端发送文件时,对于服务器来收,则是接收文件。
2. 接收文件
接收文件与发送文件实际上完全类似,区别只是由客户端向网络流写入数据,还是由服务端向网络流写入数据。
- 客户端开辟数据端口用于侦听,假设为 8006。
- 假设客户端输入了 R1,则发送控制字符串: 到服务端。
- 服务端收到以后,根据客户端 ip 和端口号与该客户端建立连接。
- 客户端建立起与服务端的连接,服务端开始网络流中写入数据。
- 传送完毕后服务端、客户端分别关闭连接。
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
Socket 张国生