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. Java并行

    序言 Java 有四种并行方式: 1.thread  使用“原汁原味”的裸线程 2.Executor (java 5 以后出现的) 3.Forkjoin 框架 (java 8 出现的) 4.Actor ...

  2. HDU 3341 Lost's revenge ( Trie图 && 状压DP && 数量限制类型 )

    题意 : 给出 n 个模式串,最后给出一个主串,问你主串打乱重组的情况下,最多能够包含多少个模式串. 分析 : 如果你做过类似 Trie图 || AC自动机 + DP 类似的题目的话,那么这道题相对之 ...

  3. Leetcode 3. Longest Substring Without Repeating Characters(string 用法 水题)

    3. Longest Substring Without Repeating Characters Medium Given a string, find the length of the long ...

  4. AGC030F - Permutation and Minimum

    https://atcoder.jp/contests/agc030/tasks/agc030_f 题解 我们先把这个排列从\(1 \sim 2n\)表达出来,然后题面中的每一对数我们可以用一条线把他 ...

  5. 用HTML5 Geolocation实现一个距离追踪器

    HTML5 Geolocation(地理定位)用于定位用户的位置.那么如何实现一个距离追踪器呢?我的思路是这样的,前提是浏览器支持h5地理定位,在这个基础上,获取用户位置,更新用户位置,计算距离,显示 ...

  6. 使用IDEA 创建Maven项目,外加SSM框架

    使用idea 新创建项目 然后 新创建 java .resources 文件夹...... 图上是项目结构 java文件夹下的 文件夹 命名规范 com.nf147(组织名)+ oukele(作者) ...

  7. 修改mac默认python版本 为python3

    mac一般自带python2.7 可以修改 ~/.bash_profile (具体的path取决于你的python3安装路径): vi ~/.bash_profile # 添加这一行 alias py ...

  8. MySQL主主模式

    mysql主主复制配置: HOSTNAME IPADDR PORT节点1:my-prod01.oracle.com 192.168.10.97 3306 节点2:my-prod02.oracle.co ...

  9. iOS即时通讯之CocoaAsyncSocket源码解析四

    原文 前言: 本文为CocoaAsyncSocket源码系列中第二篇:Read篇,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操 ...

  10. bash中前后移动一个单词和删除单词的快捷键

    bash中一个很重要的快捷键,就是向后删除一个单词: ctrl+w=ctrl+W 一个字符一个字符的移动是: ctrl+f, ctrl+b 但是, 一个单词一个单词的移动是: (但是, 这个用得比较少 ...