8.4 实践项目 网络文件传输
8.4.1 项目目标
设计一个客户端程序与服务器程序,客户端选择一个要上传的文件,就把文件上传给服
务器,服务器接收文件后保存该文件到磁盘。
如下是客户端上传文件”c:\实训指导书.docx”文件到服务器的过程:
1、客户端过程:
上传文件路径名称:c:\实训指导书.docx
文件名称: 实训指导书.docx
文件尺寸: 49963
上传成功!
2、服务器过程:
服务器在监听...
文件名称:实训指导书.docx
文件尺寸: 49963
上传成功!
8.4.2 项目设计
客户端要上传文件而且服务器要接收文件,它们之间就必须有一个协议,因为网络的数
据时连续的二进制数据流,如果不对这个二进制数据流进行划分,指定哪段是文件名称,哪
段是数据,数据到底有多少字节,那么服务器是没有办法确定文件名称与文件数据的。协议
时双方约定的,一经约定双方就必须遵守这个协议,按这个协议工作。
在这个上传与接收程序中客户端与服务器约定如下的协议:
服务器在监听,等待客户端连接;
客户端输入要上传的文件名称 fileName;
客户端读出文件数据 data,计算文件长度 size;
客户端去掉 fileName 的路径部分,保留最后的文件名称;
客户端连接服务器,连接成功后上传文件名称字符串 fileName;
客户端上传文件字节数 size 整数;
服务器接收到客户端连接,生成一个 Socket 的通信对象
服务器读取文件名称 fileName 字符串;
服务器读取文件字节数 size 整数;
服务器创建 fileName 文件准备写文件;
服务器从 Socket 中读取 size 个字节并保存到 fileName 文件中;
服务器接收文件结束,最后向客户端发送”OK”信息,最后关闭 Socket 对象;
客户端接收到”OK”信息并关闭 Socket 对象,上传过程结束;
8.4.3 项目实践
根据客户端与服务器端约定的协议我们编写服务器与客户端程序,其中采用 readInt、
writeInt 来读写整数,采用 readString、writeString 来读写字符串。
1、服务器程序 server.py
import socket
import struct