基于socket实现大文件上传
import socket
1.客户端:
操作流程:
先拿到文件--->获取文件大小---->创建字典
1.制作表头
header 如何得到 他是一个二进制字符串
序列化得到 字典字符串 ----》转成二进制字符串---header_bytes》打包 header_len = struct.pack('i' , len(header_bytes)
2.发送表头 client.send(header)
3.发送字典
client.send(header_bytfes)
4.发送真实信息
with open('文件路径‘ ,“rb”) as f:
for line in f :
client.send(line)
详情:
import socket
import struct
import json
import os # 第一步:
client = socket.socket()
# 绑定地址
client.connect(('127.0.0.1', 8080)) # 文件大小
file_size = os.path.getsize(r'D:\Data\day32\大文件上传\基于socket 实现大文件上传\hashlib.mp4') # r' ' :表示原义字符串
print(file_size)
# 命名 file_name = '性感小姐姐在线发牌.mp4' # 定义一个字典
my_dict = {"file_name": file_name,
"file_size": file_size,
"msg": '文件含有的信息哈哈自己写的'}
# 序列化字典
data_bytes = json.dumps(my_dict).encode('utf-8') # 目的一会要转成字符串入内存
print("123345")
print(data_bytes)
# 制作报头
header = struct.pack('i', len(data_bytes)) # 限制文件的大小
print(header) # b'\xbc\x00\x00\x00'
# 发送报头
client.send(header) # 客户端发送报头信息
# 发送字典
client.send(data_bytes) # 提示以字典的形式接收
print(data_bytes) # 开始发送真实信息 客户需要的详细信息 发送到服务端进行处理
with open('D:\Data\day32\大文件上传\基于socket 实现大文件上传\hashlib.mp4', "rb")as f:
for line in f:
client.send(line)
2.服务端:
来吧:
接收报头---header》解析报头 返回字典格式:1.报头得到我的字典长度header = conn.recv(4) ---->获取 header_len = struct.unpack('i' , header)[0] -----> header_bytes = conn.recv(header_len)
header_dict= json.lods(header_bytes).decode('utf-8')
import os
import json
import socket
import struct # 第一步 # IP_PORT = ('127.0.0.1', 8080)
# 可以写缩写上面的 试试吧
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5) while True: conn, addr = server.accept() # 等待接收信息 while True: try:
# 接收报头
header = conn.recv(4)
# 解析报头,获取报头长度
header_len = struct.unpack('i', header)[0]
print(header_len)
# 获取 #b'{"file_name": "\\u6027\\u611f\\u5c0f\\u59d0\\u59d0\\u5728\\u7ebf\\u53d1\\u724c.mp4", "file_size": 205033304, "msg": "\\u6587
header_bytes = conn.recv(header_len)
print(header_bytes) # # 二进制的字典的信息 # 反序列化成字典
header_dic = json.loads(header_bytes.decode('utf-8'))
# 开始循环接收文件传到本地
print(header_dic) # {'file_name': '性感小姐姐在线发牌.mp4', 'file_size': 254031692, 'msg': '注意身体哦'}
file_name = header_dic.get("file_name")
file_size = header_dic.get("file_size")
recv_size = 0
# print(file_name) # 性感美女在线发牌.mp4 with open(file_name, "wb")as f:
while recv_size < file_size:
data = conn.recv(1024)
f.write(data)
recv_size = recv_size+len(data)
# print(len(data))
# print(recv_size) #第一次接收的值
break
print(header_dic.get("msg")) # 字典点.get是他的内置方法
except ConnectionError:
break
conn.close()
可以获取文件 获取我们文件的大小(规定传的大小)
基于socket实现大文件上传的更多相关文章
- 基于 WebSocket 的聊天和大文件上传(有进度提示)完美实现
大家好,好久没有写文章了,当然不是不想写,主要是工作太忙,公司有没有网络环境,不让上网,所以写的就少了.今天是2019年的最后一天,明天就要开始新的一年,当然也希望自己有一个新的开始.在2019年的最 ...
- java 大文件上传 断点续传 完整版实例 (Socket、IO流)
ava两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...
- TCP大文件上传与UDP协议
一.UCP大文件上传(解决粘包问题) ①客户端 import socket, os, json, struct client = socket.socket() client.connect(('12 ...
- 【原创】用JAVA实现大文件上传及显示进度信息
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
- tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)
tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录)2)to ...
- 使用百度webuploader实现大文件上传
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- web大文件上传(web应用---SSH框架)
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
随机推荐
- idea 打包model 为jar包
1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...
- Python_019(六星级别之反射方法)
1.反射 1)神赐给你的内置函数 : a: getattr(命名空间,'函数名') == 命名空间.属性名; 这里的命名空间指的是对象或者类; b: getattr四个应用场景: 1)类名.名字 &l ...
- kohana orm巧用字段备注支持扩展
1.SELECT * FROM `bota_language` WHERE `type` = 'order_type'; id key value type ---- ...
- #1126-JSP客户端请求
JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的.您可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器 ...
- RabbitMQ中Confirm确认与Return返回消息详解(八)
理解Confirm消息确认机制: 消息的确认,是指生产者投递消息后,如果Broker收到消息,则会给我们生产这一个应答. 生产者进行接收应答,用来确定这条消息是否正常的发送到Broker,这种方式也是 ...
- Codeforces Round #369 (Div. 2) A. Bus to Udayland (水题)
Bus to Udayland 题目链接: http://codeforces.com/contest/711/problem/A Description ZS the Coder and Chris ...
- Python List 列表list()方法
Python基础数据类型之一列表list,在python中作用很强在,列表List可以包含不同类型的数据对像,同时它是一个有序的变量集合,每个变量可以存储一个地址.所有序列能用到的标准操作方法,列表也 ...
- 转 opencv红绿灯检测
整个项目源码:GitHub 引言 前面我们讲完交通标志的识别,现在我们开始尝试来实现交通信号灯的识别 接下来我们将按照自己的思路来实现并完善整个Project. 在这个项目中,我们使用HSV色彩空间来 ...
- 深入探讨 Python 的 import 机制:实现远程导入模块
深入探讨 Python 的 import 机制:实现远程导入模块 所谓的模块导入( import ),是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用. 在 Python 中使用 ...
- QCOW2/RAW/qemu-img 概念浅析
目录 目录 扩展阅读 RAW QCOW2 QEMU-COW 2 QCOW2 Header QCOW2 的 COW 特性 QCOW2 的快照 qemu-img 的基本使用 RAW 与 QCOW2 的区别 ...