【问题标题】:How to download file from local server in Python如何在 Python 中从本地服务器下载文件
【发布时间】:2015-05-20 13:29:30
【问题描述】:

场景是:

  1. 客户端将输入文件名,例如 xyz
  2. 服务器将显示它在不同文件夹中的所有文件。

客户端将选择 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()

【问题讨论】:

  • 您没有为此使用 HTTP 有什么特别的原因吗?
  • 我必须使用 tcp。
  • HTTP 通过 TCP 工作。
  • Http 的解决方案是什么?
  • 请记住,对于 localhost(环回接口),有效负载大小为 65K (MTU),这与以太网的 1500 字节(通常,巨型电缆可以传输 9K 字节)MTU 不同。所以你可以在这里增加缓冲区大小。

标签: python sockets server


【解决方案1】:

以下是展示如何通过 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()

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

【讨论】:

  • 这里的文件名是什么?在服务器端?我是 Python 新手
  • 我可以和你聊天吗?或者其他的东西 ?帮助是关于你发布的这段代码。文件正在下载但为空。
  • 您能提供有关您的测试用例的信息吗?您尝试下载的文件必须存在于服务器上。
  • 我们在 stackoverflow 上聊天。如果您认为您可能无法在评论中解释该问题,请发布一个提供所有详细信息的新问题。这将确保 stackoverflow 上的其他所有人都可以分析问题并提供建议。
猜你喜欢
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多