分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

socket编程实现文件的上传和下载

发布时间:2023-09-06 02:17责任编辑:熊小新关键词:暂无标签

server端

#!/usr/bin/env python# coding:utf-8import socketimport structimport jsonbuffer = 1024sk = socket.socket()sk.bind((‘127.0.0.1‘,8888))sk.listen()conn,addr = sk.accept()ret = conn.recv(4)len_operate_c = struct.unpack(‘i‘,ret)[0]operate_c = conn.recv(len_operate_c)operate_c = operate_c.decode(‘utf-8‘)if operate_c == ‘upload‘: ???res = conn.recv(4) ???len_head = struct.unpack(‘i‘,res)[0] ???head = conn.recv(len_head).decode(‘utf-8‘) ???head = json.loads(head) ???filesize = head[‘filesize‘] ???filename = head[‘filename‘] ???with ?open (filename,‘wb‘) as ?f: ???????while filesize: ???????????if filesize >= buffer: ???????????????content = conn.recv(buffer) ???????????????f.write(content) ???????????????filesize -= buffer ???????????else : ???????????????content = conn.recv(filesize) ???????????????f.write(content) ???????????????filesize = 0conn.close()sk.close()

client端

#!/usr/bin/env python# coding:utf-8def get_filename(file_path): ???return os.path.basename(file_path)import socketimport osimport jsonimport structbuffer = 1024sk = socket.socket()sk.connect((‘127.0.0.1‘,8888))operate = [‘download‘,‘upload‘]for ?k,j ?in ?enumerate(operate,1) : ???print(k,j)num = int(input(‘请输入你的选项: ‘))operate_c = operate[(num-1)]len_operate_c = len(operate_c)print(len_operate_c)res = struct.pack(‘i‘,len_operate_c)sk.send(res)sk.send(operate_c.encode(‘utf-8‘))if operate_c == ‘upload‘ : ???head = {‘filename‘:None,‘filesize‘:None,} ???file_path = input("请输入要上传的文件绝对路径 :") ???filename = get_filename(file_path) ???head[‘filename‘] = filename ???filesize = os.path.getsize(file_path) ???head[‘filesize‘]=filesize ???json_head = json.dumps(head) ???len_head = len(json_head) ???ret = struct.pack(‘i‘,len_head) ???sk.send(ret) ???sk.send(json_head.encode(‘utf-8‘)) ???with open (file_path,‘rb‘) as f: ???????while filesize: ???????????if filesize >= buffer : ???????????????content = ?f.read(buffer) ???????????????sk.send(content) ???????????????filesize -= buffer ???????????else : ???????????????content = f.read(filesize) ???????????????sk.send(content) ???????????????filesize = 0sk.close()

socket编程实现文件的上传和下载

原文地址:https://www.cnblogs.com/weidaijie/p/9747416.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved