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实现大文件上传的更多相关文章

  1. 基于 WebSocket 的聊天和大文件上传(有进度提示)完美实现

    大家好,好久没有写文章了,当然不是不想写,主要是工作太忙,公司有没有网络环境,不让上网,所以写的就少了.今天是2019年的最后一天,明天就要开始新的一年,当然也希望自己有一个新的开始.在2019年的最 ...

  2. java 大文件上传 断点续传 完整版实例 (Socket、IO流)

    ava两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...

  3. TCP大文件上传与UDP协议

    一.UCP大文件上传(解决粘包问题) ①客户端 import socket, os, json, struct client = socket.socket() client.connect(('12 ...

  4. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  5. 用c++开发基于tcp协议的文件上传功能

    用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...

  6. 百万行mysql数据库优化和10G大文件上传方案

    百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...

  7. tomcat相关配置技巧梳理 (修改站点目录、多项目部署、限制ip访问、大文件上传超时等)

    tomcat常用架构:1)nginx+tomcat:即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录)2)to ...

  8. 使用百度webuploader实现大文件上传

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  9. web大文件上传(web应用---SSH框架)

    版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

随机推荐

  1. Python pdfkit

    序言 住在地下室的人,依然有仰望星空的权利. pdfkit python使用pdfkit中,如果使用pdfkit.fromurl 或者pdfkit.fromstring等,就会出现上述错误.而且如果你 ...

  2. Java——常用类(File)

    [File]    <1>java.io.File类代表系统文件名(路径和文件名).         ----注意:这里代表的只是文件名,而不是物理上的文件(硬盘上的数据),通过该类无法读 ...

  3. [bzoj]2705: [SDOI2012]Longge的问题[数论][数学][欧拉函数][gcd]

    [bzoj]P2705 OR [luogu]P2303 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需 ...

  4. abc136

    第一次打ABC 题目简单,但我菜 E - Max GCD 可以任选两个数,一个减去1,一个加上1,可以操作$0,\cdots,K$次,求操作后数组最大GCD 枚举数组之和的因子,试图找到符合题意的最大 ...

  5. 【ArchSummit干货分享】个推大数据金融风控算法实践

    作者:个推高级数据工程师 晓骏 众所周知,金融是数据化程度最高的行业之一,也是人工智能和大数据技术重要的应用领域.随着大数据收集.存储.分析和模型技术日益成熟,大数据技术逐渐应用到金融风控的各个环节. ...

  6. 用 MuGo 搭建 Go Engine 在 KGS 对战

    MuGo 是一个开源的 Go Engine,下棋能力大概在 10k - 2k 左右. 用 MuGo 搭建 Go Engine 并在 KGS 对战的步骤如下: 1. 安装 TensorFlow 因为 M ...

  7. 用流的方式来操作hdfs上的文件

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  8. Spring Cloud Stream 使用延迟消息实现定时任务(RabbitMQ)

    应用场景 通常在应用开发中我们会碰到定时任务的需求,比如未付款订单,超过一定时间后,系统自动取消订单并释放占有物品. 许多同学的第一反应就是通过spring的schedule定时任务轮询数据库来实现, ...

  9. 在静态页面中使用 Vue.js

    在静态页面中使用 Vue.js 不使用Node.js, NPM, Webpack 等, 在静态页中使用Vue.js. 包括路由, 单文件组件. 1. 创建index.html index.html做为 ...

  10. Delphi XE2 之 FireMonkey 入门(9) - TBitmap

    TBitmap 主要成员: { 方法 } SetSize();              //设置大小 Clear();                //取消, 就是用指定颜色覆盖 ClearRec ...