博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于socket套接字发送大文件示例
阅读量:6716 次
发布时间:2019-06-25

本文共 1905 字,大约阅读时间需要 6 分钟。

基于socket套接字上传大文件

server端(服务端)

import socketimport structimport jsonserver = socket.socket()server.bind(('127.0.0.1', 8080))server.listen(5)while True:    conn, addr = server.accept()    while True:        try:            hander = conn.recv(4)            print('报头',hander)            if hander == 0: break            # 解析报头,并获取字典长度            dic_len = struct.unpack('i', hander)[0]            # 获得字典内容            real_dic = json.loads(conn.recv(dic_len))            # 从字典中获取 真实文件名和大小            file_name = real_dic.get('file_name')            file_size = real_dic.get('file_size')            # 接受真实数据并保存到文件中            with open(file_name, 'wb') as f:                size = 0                while size < file_size:                    res = conn.recv(1024)                    size += len(res)                    f.write(res)            print('接受成功')            break        except ConnectionResetError:            break

client端(客户端)

import socketimport jsonimport structimport osclient = socket.socket()client.connect(('127.0.0.1', 8080))# 获得文件名和文件大小while True:    dir_list = os.listdir(r'F:\pycharm文档\5.18\文件库')    # 打印出可选上传文件    [print(k,v) for k,v in enumerate(dir_list,start=1)]    choice  = input('>>>:')    if choice in ['1','2']:        file_name = dir_list[int(choice) - 1]        print('文件名:',file_name)        file_path = os.path.join(r'F:\pycharm文档\5.18\文件库',file_name)        # 得到文件大小        file_size = os.path.getsize(file_path)        print('文件大小:',file_size)        break    else:        print('again')# 制作报头字典内容dic = {    'file_name':file_name,    'file_size':file_size}dic_json = json.dumps(dic)dic_json_bytes = dic_json.encode('utf8')# 制作字典的报头hander = struct.pack('i',len(dic_json_bytes))client.send(hander)client.send(dic_json_bytes)# 发送真实数据with open(file_path,'rb') as f:    for line in f:        client.send(line)client.close()

转载于:https://www.cnblogs.com/shuchengyi/p/10886029.html

你可能感兴趣的文章
JS面试题之比较两个对象是否相等?
查看>>
H5 notification浏览器桌面通知
查看>>
阿里云移动端播放器高级功能---安全播放
查看>>
手挽手带你学React:一档 React环境搭建,语法规则,基础使用
查看>>
自建网盘教程之:使用可道云搭建私有云网盘,无需数据库
查看>>
重新学习web后端开发-002-hello, world
查看>>
Webpack4 学习笔记 - 03:loader 打包静态资源(样式)
查看>>
常用SQL汇总(Java开发)
查看>>
vue跳转传参刷新后参数消失
查看>>
Python基本数据类型之时间
查看>>
01Go命令介绍
查看>>
【spring boot2】第4篇:spring boot对静态资源的管理
查看>>
python3 使用argparse更好的组织输入参数
查看>>
Flutter 环境搭建以及创建第一个APP遇到的坑
查看>>
mybatis连表查询
查看>>
【跃迁之路】【694天】程序员高效学习方法论探索系列(实验阶段451-2019.1.14)...
查看>>
[中级] Func() 和 ObjBindMethod() 的关系
查看>>
垃圾回收机制
查看>>
C语言实现一个简易的Hash table(6)
查看>>
【javascript】实现模板生成大量数据
查看>>