어떻게 python socket 모듈 을 사용 하여 간단 한 파일 다운 로드 를 실현 합 니까?

서버 쪽:

# ftp server 
import socket, os, time
 
server = socket.socket()
server.bind(("localhost", 8080))
server.listen()
while True:
  conn, addr = server.accept()
  print("      :", addr)
  while True:
    try: # windows     ,      
      data = conn.recv(1024)
      if not data:
        print("      ")
        break
    except Exception as e:
      print("       ")
      break
    cmd, filename = data.decode().split() # ex: get name.txt
    if os.path.isfile(filename):
      f = open(filename, "rb")
      #          
      size = os.stat(filename).st_size
      conn.send(str(size).encode()) #       
      conn.recv(1024)
      for line in f:  #             
        conn.send(line)
      f.close()
      print("      ")
    conn.send("not file".encode())
server.close()
클 라 이언 트 쪽:

import socket
 
client = socket.socket()
client.connect(("localhost", 8080))
while True:
  cmd = input(">>:").strip()
  if len(cmd)==0: continue
  if cmd.startswith("get"):
    client.send(cmd.encode()) #     
    server_response = client.recv(1024)
    if server_response.decode().startswith("not"):
      print("        ")
      continue
    client.send(b"ready to recv file") #     
    file_size = int(server_response.decode()) #       
    rece_size=0
    filename = cmd.split()[1]
    f = open(filename + ".new", "wb")
    while rece_size < file_size:
      if file_size - rece_size > 1024: #       
        size = 1024
      else: #      ,      ,          
        size = file_size - rece_size
        print("last receive:", size)
      recv_data = client.recv(size)
      rece_size += len(recv_data) #         
      f.write(recv_data) #     ,   
    else:
      print("      ")
      f.close()
client.close()
테스트 사례:


이상 은 python socket 모듈 을 어떻게 사용 하여 간단 한 파일 다운 로드 를 실현 하 는 지 에 대한 상세 한 내용 입 니 다.python socket 파일 다운로드 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기