如何在Python中从本地服务器下载文件

时间:2015-03-17 22:05:31

标签: python sockets server

情景是:

  1. 客户端将输入文件名,例如 xyz
  2. 服务器将显示它在不同文件夹中的所有文件。
  3. 客户将选择1或2或3(如果有)。 和文件将被下载。

    我已经完成了搜索部分。我需要帮助下载并将文件保存在任何其他目录中。

    到目前为止,我的代码用于搜索文件。

    import socket
    tcp_ip="127.0.0.1"
    tcp_port=1024
    buffer_size= 200
    filename=raw_input("Enter file name\n")
    
    s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((tcp_ip,tcp_port))
    data=s.recv(buffer_size)
    s.close()
    

    服务器代码:(此代码现在用于一个文件)所需的帮助是如何下载和保存在服务器上找到的文件。

    import socket
    import os
    tcp_ip='127.0.0.1'
    tcp_port=1024
    buffer_size=100
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((tcp_ip, tcp_port))
    s.listen(1)
    conn, addr = s.accept()
    print 'Connection Address:',addr
    while 1:
        data=conn.recv(buffer_size)
        if not data: 
            break
        else:
            print "received server side data:", data
        conn.send(data)
    conn.close()
    

1 个答案:

答案 0 :(得分:3)

以下示例显示了如何通过tcp从服务器下载文件。

客户代码:

import socket
import os

HOST = 'localhost'    
PORT = 1024
downloadDir = "/tmp"


filename = raw_input('Enter your filename: ')
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket1.connect((HOST, PORT))
socket1.send(filename)
with open(os.path.join(downloadDir, filename), 'wb') as file_to_write:
    while True:
        data = socket1.recv(1024)
        if not data:
            break
        file_to_write.write(data)
    file_to_write.close()
socket1.close()

服务器代码:

import socket
HOST = 'localhost'
PORT = 1024

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((HOST, PORT))
socket.listen(1)
while (1):
    conn, addr = socket.accept()
    reqFile = conn.recv(1024)
    with open(reqFile, 'rb') as file_to_send:
        for data in file_to_send:
            conn.sendall(data)
    conn.close()

socket.close()

注意:服务器代码不健壮,并且在文件不存在时会崩溃。你应该根据你的需要修改上面的例子。