pythontcp文件传输_python3利用tcp实现文件夹远程传输

本文实例为大家分享了python实现文件夹远程传输的具体代码,供大家参考,具体内容如下

实现功能:

通过tcp协议模拟文件夹的下载,注意是文件夹,不是文件。

下面让我们实现以下:

其中有部分功能还未实现有兴趣的可以将代码自行补全

服务器端代码:

import os

import socket

import time

# 定义全局列表用来存储子文件夹

list1 = []

def deal_file(files,dir_name,dir_socket):

# 如果打开文件时报错即files为文件夹

try:

old_file = open(os.path.join(dir_name.decode(),files),"rb")

except:

# 讲导致报错的文件夹放入全局列表等待处理

global list1

list1.append(files)

else:

# 没有报错则执行读取发送关闭文件

file_data = old_file.read()

print("发送内容")

dir_socket.send(file_data)

old_file.close()

def deal_dir():

# 待完善用于处理子文件夹,需要利用递归完成

pass

def main():

# 创建套接字

tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 固定端口号

tcp_socket.bind(("",9992))

# 被动套接字转换为主动套接字

tcp_socket.listen(128)

# 将队列中的客户端取出

dir_socket,client_ip = tcp_socket.accept()

# 接受客户端消息

dir_name = dir_socket.recv(1024)

# 显示文件列表

file_list = os.listdir(dir_name.decode())

# 将文件列表发送至客户端

dir_socket.send(str(file_list).encode())

# 阻塞0.5s等待发送成功

time.sleep(0.5)

# 便利每个文件发送文件内容

for files in file_list:

deal_file(files, dir_name, dir_socket)

global list1

# 如果全局列表内有文件则

if list1:

# 带完善

pass

else:

dir_socket.close()

print("文件全部传输完成")

tcp_socket.close()

if __name__ == '__main__':

main()

客户端源码:

import socket

import os

import threading

import time

def recv_data(files,dir_name,tcp_socket):

file_data = tcp_socket.recv(1024)

new_file = open(os.path.join(dir_name+"新", files),"wb")

new_file.write(file_data)

new_file.close()

print("文件%s下载完成" % files)

def main():

# 创建套接字

tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 连接服务器

tcp_socket.connect(("192.168.11.128", 9992))

# 向服务器发送要拷贝的文件夹

dir_name = input("请输入要拷贝的文件夹")

tcp_socket.send(dir_name.encode())

# 新建文件夹

os.mkdir(dir_name+"新")

# 接受文件列表,循环打开文件写入

file_list = tcp_socket.recv(1024)

a = eval(file_list)

print(a)

for files in eval(file_list.decode()):

recv_data(files,dir_name,tcp_socket)

if __name__ == '__main__':

main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值