# 服务端
import json
import socket
import struct
server = socket.socket()
server.bind(('127.0.0.1',8001))
server.listen()
conn,addr = server.accept()
#首先接收文件的描述信息的长度
struct_data_len = conn.recv(4)
data_len = struct.unpack('i',struct_data_len)[0]
# 通过文件信息的长度将文件的描述信息全部接收
print('data_len>>>',data_len)
file_info_bytes = conn.recv(data_len)
#将文件描述信息转换为字典类型,以便操作
file_info_json = file_info_bytes.decode('utf-8')
file_info_dict = json.loads(file_info_json) #{'file_name': 'aaa.mp4', 'file_size': 24409470}
print(file_info_dict)
#统计每次接收的累计长度
recv_sum = 0
#根据文件描述信息,指定文件路径和文件名称
file_path = 'D:\s18\jj' + '\\' + file_info_dict['file_name']
#接收文件的真实数据
with open(file_path,'wb') as f:
#循环接收,循环结束的依据是文件描述信息中文件的大小,也是通过一个初始值为0的变量来统计
while recv_sum < file_info_dict['file_size']:
every_recv_data = conn.recv(1024)
recv_sum += len(every_recv_data)
f.write(every_recv_data)

  

# 客户端
import os
import socket
import json
import struct
client = socket.socket()
client.connect(('127.0.0.1',8001))
#统计文件大小
file_size = os.path.getsize(r'D:\python_workspace_s18\day029\aaa.mp4')
#统计文件描述信息,给服务端,服务端按照我的文件描述信息来保存文件,命名文件等等,现在放到一个字典里面了
file_info = {
'file_name':'aaa.mp4',
'file_size':file_size,
}
#由于字典无法直接转换成bytes类型的数据,所以需要json来将字典转换为json字符串.在把字符串转换为字节类型的数据进行发送
#json.dumps是将字典转换为json字符串的方法
file_info_json = json.dumps(file_info) #将字符串转换成bytes类型的数据
file_info_byte = file_info_json.encode('utf-8') #为了防止黏包现象,将文件描述信息的长度打包后和文件的描述信息的数据一起发送过去
data_len = len(file_info_byte)
data_len_struct = struct.pack('i',data_len) #发送文件描述信息
client.send(data_len_struct + file_info_byte) #定义一个变量,=0,作为每次读取文件的长度的累计值
sum = 0
#打开的aaa.mp4文件,rb的形式,
with open('aaa.mp4','rb') as f:
#循环读取文件内容
while sum < file_size:
#每次读取的文件内容,每次读取1024B大小的数据
every_read_data = f.read(1024)
#将sum累加,统计长度
sum += len(every_read_data)
#将每次读取的文件的真实数据返送给服务端
client.send(every_read_data)

最新文章

  1. AES,RSA对称加密和非对称加密
  2. prolog 阶段总结
  3. BaseAdapter的getView()方法
  4. vmware下linux系统的安装过程
  5. UVA 10816 + HDU 1839 Dijstra + 二分 (待研究)
  6. paip.微信菜单直接跳转url和获取openid流程总结
  7. Eclipse+SVN搭建开发环境
  8. Tyvj 9.10 总结 (其实只是发一下心情)
  9. Target host is not specified错误
  10. 关于 Java Collections API 您不知道的 5 件事--转
  11. Ubuntu12.04下载Android4.0.1源码全过程,附若干问题解决[转]
  12. UITableViewHeaderFooterView的使用+自己主动布局
  13. loj6045 价
  14. [No0000104]JavaScript-基础课程4
  15. npm包发布记录
  16. 2018ICPC网络赛(徐州站)A题题解
  17. 《GPU高性能编程CUDA实战》第十章 流
  18. Matlab 基础
  19. CSS外边距合并&块格式上下文
  20. 20155321 2016-2017-2《Java程序设计》课堂实践项目2

热门文章

  1. [软件工程基础]2017.10.27 第二次 Scrum 会议
  2. ZOJ3329(数学推导+期望递推)
  3. Ubuntu-apt安装Jenkins
  4. 119 Pascal&#39;s Triangle II 帕斯卡三角形 II Pascal&#39;s Triangle II
  5. VMware下OSSIM 5.2.0的下载、安装和初步使用(图文详解)
  6. 《javascript设计模式》笔记之第七章:工厂模式
  7. PHP知识点总结4
  8. ssh框架出现Java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误
  9. 最小化安装centos后ifconfig看不到eth0
  10. 深度技术GHOST WIN7系统32,64位旗舰稳定版