溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么在python3中使用tcp實(shí)現(xiàn)文件夾遠(yuǎn)程傳輸

發(fā)布時(shí)間:2021-06-01 17:22:39 來(lái)源:億速云 閱讀:208 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

怎么在python3中使用tcp實(shí)現(xiàn)文件夾遠(yuǎn)程傳輸?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

服務(wù)器端代碼:

import os
import socket
import time
# 定義全局列表用來(lái)存儲(chǔ)子文件夾
list1 = []


def deal_file(files,dir_name,dir_socket):
  # 如果打開(kāi)文件時(shí)報(bào)錯(cuò)即files為文件夾
  try:
    old_file = open(os.path.join(dir_name.decode(),files),"rb")
  except:
    # 講導(dǎo)致報(bào)錯(cuò)的文件夾放入全局列表等待處理
    global list1
    list1.append(files)
  else:
    # 沒(méi)有報(bào)錯(cuò)則執(zhí)行讀取發(fā)送關(guān)閉文件
    file_data = old_file.read()
    print("發(fā)送內(nèi)容")
    dir_socket.send(file_data)

    old_file.close()

def deal_dir():
  # 待完善用于處理子文件夾,需要利用遞歸完成
  pass


def main():
  # 創(chuàng)建套接字
  tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  # 固定端口號(hào)
  tcp_socket.bind(("",9992))
  # 被動(dòng)套接字轉(zhuǎn)換為主動(dòng)套接字
  tcp_socket.listen(128)
  # 將隊(duì)列中的客戶(hù)端取出
  dir_socket,client_ip = tcp_socket.accept()
  # 接受客戶(hù)端消息
  dir_name = dir_socket.recv(1024)
  # 顯示文件列表
  file_list = os.listdir(dir_name.decode())
  # 將文件列表發(fā)送至客戶(hù)端
  dir_socket.send(str(file_list).encode())
  # 阻塞0.5s等待發(fā)送成功
  time.sleep(0.5)
  # 便利每個(gè)文件發(fā)送文件內(nèi)容
  for files in file_list:
    deal_file(files, dir_name, dir_socket)
  global list1
  # 如果全局列表內(nèi)有文件則
  if list1:
    # 帶完善
    pass

  else:


    dir_socket.close()

    print("文件全部傳輸完成")
    tcp_socket.close()



if __name__ == '__main__':
  main()

客戶(hù)端源碼:

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():
  # 創(chuàng)建套接字
  tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  # 連接服務(wù)器
  tcp_socket.connect(("192.168.11.128", 9992))

  # 向服務(wù)器發(fā)送要拷貝的文件夾
  dir_name = input("請(qǐng)輸入要拷貝的文件夾")
  tcp_socket.send(dir_name.encode())
  # 新建文件夾
  os.mkdir(dir_name+"新")
  # 接受文件列表,循環(huán)打開(kāi)文件寫(xiě)入
  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()

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI