分享web开发知识

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

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

基于Tcp协议的上传下载

发布时间:2023-09-06 02:10责任编辑:傅花花关键词:暂无标签

目录格式:

  

构建此目录就可随意使用! 

client端

import socketimport sysimport osimport jsonimport structsk = socket.socket()adress = (‘192.168.12.11‘, 29231)def upload(): ???message = {‘filename‘: None, ‘filesize‘: None} ???sk.connect(adress) ???temp = ‘上传‘ ???sk.send(temp.encode(‘utf-8‘)) ???meg = input(‘输入文件路径:‘) ???filename = os.path.basename(meg) ???filesize = os.path.getsize(meg) ???message[‘filename‘] = filename ???message[‘filesize‘] = filesize ???str_message = json.dumps(message) ???len_message = len(str_message) ???b_len_message = struct.pack(‘i‘, len_message) ???sk.send(b_len_message + str_message.encode(‘utf-8‘)) ???with open(meg, ‘rb‘) as f: ???????while filesize: ???????????connent = f.read() ???????????sk.send(connent) ???????????filesize -= len(connent)def download(): ???path = os.path.dirname(os.path.abspath(__file__)) ???sk.connect(adress) ???temp = ‘下载‘ ???sk.send(temp.encode(‘utf-8‘)) ???num = sk.recv(1024).decode(‘utf-8‘) ???print(‘可下载文件:%s‘ % (num,)) ???name = input(‘输入下载文件名称:‘) ???sk.send(name.encode(‘utf-8‘)) ???path = ‘/‘.join([path, ‘本地文件‘, name]) ???b_len_message = sk.recv(4) ???len_message = struct.unpack(‘i‘, b_len_message)[0] ???res_s = sk.recv(len_message).decode(‘utf-8‘) ???str_message = json.loads(res_s) ???filesize = str_message[‘filesize‘] ???with open(path, ‘ab‘) as f: ???????while filesize: ???????????connent = sk.recv(1024) ???????????f.write(connent) ???????????f.flush() ???????????filesize -= len(connent)def main(): ???dic = [ ???????(‘上传‘, ‘upload‘), ???????(‘下载‘, ‘download‘) ???] ???for i in enumerate(dic, 1): ???????print(i[0], i[1][0]) ???num = int(input(‘请输入选项:‘)) ???getattr(sys.modules[__name__], dic[num - 1][1])() ???sk.close()if __name__ == ‘__main__‘: ???main()

 server端

import socketimport structimport osimport jsonpath = os.path.abspath(__file__)path = os.path.dirname(path)sk = socket.socket()adress = (‘0.0.0.0‘, 29231)sk.bind(adress)sk.listen(4)conn, addr = sk.accept()def upload(path): ???b_len_message = conn.recv(4) ???len_message = struct.unpack(‘i‘, b_len_message)[0] ???res_s = conn.recv(len_message).decode(‘utf-8‘) ???str_message = json.loads(res_s) ???filename = ‘1‘ + str_message[‘filename‘] ???filesize = str_message[‘filesize‘] ???path = ‘/‘.join([path, ‘客户端上传的文件‘, filename]) ???with open(path, ‘ab‘) as f: ???????while filesize: ???????????connent = conn.recv(1024) ???????????f.write(connent) ???????????f.flush() ???????????filesize -= len(connent)def download(path): ???message = {‘filename‘: None, ‘filesize‘: None} ???res = os.listdir(‘/‘.join([path, ‘客户端上传的文件‘])) ???sum = ‘‘ ???for i in res: ???????sum = sum + ‘ ‘ + i + ‘ ???‘ ???conn.send(sum.encode(‘utf-8‘)) ???filename = conn.recv(1024).decode(‘utf-8‘) ???path = ‘/‘.join([path, ‘客户端上传的文件‘, filename]) ???filesize = os.path.getsize(path) ???message[‘filename‘] = path ???message[‘filesize‘] = filesize ???str_message = json.dumps(message) ???len_message = len(str_message) ???b_len_message = struct.pack(‘i‘, len_message) ???conn.send(b_len_message + str_message.encode(‘utf-8‘)) ???with open(path, ‘rb‘) as f: ???????while filesize: ???????????connent = f.read() ???????????conn.send(connent) ???????????filesize -= len(connent)def main(): ???res_s = conn.recv(1024).decode(‘utf-8‘) ???if res_s == ‘上传‘: ???????upload(path) ???????sk.close() ???if res_s == ‘下载‘: ???????download(path) ???????sk.close()if __name__ == ‘__main__‘: ???while 1: ???????main()

基于Tcp协议的上传下载

原文地址:https://www.cnblogs.com/xiao-xue-di/p/9484096.html

知识推荐

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