day30-client上传比较大的数据给server
#在网络上面传输的数据叫数据包,数据包里面的数据叫报文,报文都有报头。
#报头可以包含文件路径、文件大小、文件名称等等。
#当数据比较长,一次性发送会报错,需要分多次发送。
#client端上传数据到server端,server端下载数据: #client端:
import socket
import os
import json
import struct
sk = socket.socket()
sk.connect(('127.0.0.1',9008))
buffer = 4096 #定制报头
head = {'directory':r'D:\python教学视频\day32', #字符串前面加r,表示原生字符串,反斜杠\不起转义作用。
'name':r'06 python fullstack s9day32 struct模块定制报头ftp实践.mp4',
'size':None}
file_path = os.path.join(head['directory'],head['name']) #文件路径=目录+名称
print(file_path)#D:\python教学视频\day32\06 python fullstack s9day32 struct模块定制报头ftp实践.mp4
filesize = os.path.getsize(file_path) #文件大小,通过文件路径得到文件大小。
print(filesize)
head['size'] = filesize #把字典的值None修改为filesize。 #报头是字典,先转为str,再转为bytes才能通过网络发送:
json_head = json.dumps(head)#字典转为字符串
bytes_head = json_head.encode('utf-8')#字符串转为字节bytes #发送含有报头长度的包和报头:
pack_len = struct.pack('i',len(bytes_head))#打包bytes类型的报头的长度。
sk.send(pack_len) #先发含有报头长度的包
sk.send(bytes_head) #再发bytes类型的报头 #发送报文:当数据比较长,一次性发送会报错,需要分多次发送。
with open(file_path,'rb') as f: #encoding='utf-8'不需要写,因为读取的数据就是bytes类型,不需要encoding把它编码为bytes类型
while filesize > 0:
if filesize > buffer:
content = f.read(buffer) #每次读取4096个字节的内容,然后发送过去。
sk.send(content)
filesize -= buffer
else:
content = f.read(filesize)
sk.send(content)
break sk.close() #server端:
import socket
import struct
import json
buffer = 4096
sk = socket.socket()
sk.bind(('127.0.0.1',9008))
sk.listen()
conn,addr = sk.accept() pack = conn.recv(4) #接收含有报头长度的包,接收4个字节的包。
unpack = struct.unpack('i',pack) #解包
json_head = conn.recv(unpack[0]).decode('utf-8') #接收报头长度大小的内容,解码为str
head = json.loads(json_head) #str转为字典
filesize = head['size'] with open('教学视频.mp4','wb') as f: #在跟本py文件同一目录下创建 教学视频.mp4 文件。
while filesize > 0:
if filesize >= buffer:
content = conn.recv(buffer)
f.write(content)
filesize -= buffer
else:
content = conn.recv(filesize)
f.write(content)
break conn.close()
sk.close()
day30-client上传比较大的数据给server的更多相关文章
- C# WPF ASP.net 上传多文件和数据
C# WinForm 上传多文件和数据 public static class HttpHelper { private static readonly Encoding DEFAULTENCODE ...
- 上传读取Excel文件数据
/// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...
- jersey client上传下载文件
jersey client上传文件demo File file = new File("/tmp/test.jpg"); System.out.println(file.exist ...
- HTML5可预览多图片ajax上传(使用formData传递数据)
HTML5可预览多图片ajax上传(使用formData传递数据) 在介绍上传图片之前,我们简单的来了解下FormData的基本使用:介绍完成后这些基本知识后,我们会在文章最后提供一个demo,就是a ...
- phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法
phpmyadmin-您可能正在上传很大的文件,请参考文档来寻找解决方法 实这个很简单的只要更改php.ini里三个配置即可.(见下面加粗部分,改成你自己的需求即可) ; Maximum allo ...
- Burp Post、Get数据包转为上传multipart/form-data格式数据包
方法一: 新建一个网页进行上传,代码代码如下: <html> <head></head> <body> <form method="po ...
- ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)
在写这篇的时候本来想把标题直接写成报错的提示,如下: “SecurityError:Blocked a frame with origin "http://localhost:55080&q ...
- asp.net 文件上传,大文件上传。
新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button ! ! ! 进入Button事件 //----------------------- ...
- asp.net限制了上传文件大小为..M,解决方法
asp.net限制了上传文件大小为4M,在:在web.config里加下面一句,加在<System.web></System.web>之间如下:<system.web&g ...
随机推荐
- Uber推出全新交通估算体系能颠覆传统模式吗?
当下,大众的交通出行正在被全面颠覆.除了传统的出行方式外,共享打车.共享单车.共享滑板车.分时租赁的共享汽车等,正在形成一个全新交通出行矩阵.鉴于交通出行市场的巨大潜力,众多巨头及独角兽企业在绞尽脑汁 ...
- 使用代理IP访问网络
现在很多领域都需要用到代理IP,用到的领域越来越广,如爬虫.投票.抢购等等. 代理IP免费获取地址:http://www.xicidaili.com/(少部分可以用) 我这个案例使用的上面地址里面的免 ...
- wordcloud安装错误信息的解决
参考链接:https://www.zhihu.com/people/si-kong-ji-54/posts 在windows下command里运行指令 pip install wordcloud ...
- java 继承条件下的构造方法调用
运行 TestInherits.java示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是否是第 ...
- iOS部分页面横屏显示
在iOS系统支持横屏顺序默认读取plist里面设置的方向(优先级最高)等同于Xcode Geneal设置里面勾选application window设置的级别次之 然后是UINavigationcon ...
- LeetCode No.166,167,168
No.166 FractionToDecimal 分数到小数 题目 给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数. 如果小数部分为循环小数 ...
- JavaEE--使用百度echarts实现地图报表
参考:http://echarts.baidu.com/option.html#title https://www.cnblogs.com/zhangyong123/p/4974554.html ht ...
- 拉格朗日乘子(Lagrange multify)和KKT条件
拉格朗日乘子(Lagrange multify)和KKT条件 无约束问题 无约束问题定义如下: f(x)称为目标函数, 其中x是一个向量,它的维度是任意的. 通过求导, 令导数等于零即可: 如下图所示 ...
- 清除input表单内容
碰到几次情况,页面刷新或者从上级页面返回表单的内容依然遗留,很影响使用. <form action="" method="" autocomplete=& ...
- 写一个读取Excel表格的接口
# -*- coding: gbk -*-import xlrd class Canshu: def __init__(self,filepath): """ 创建文件对 ...