2012-01-04 31 views
5

Tôi không biết nếu điều này đã được trả lời trước đó (tôi đã xem trực tuyến nhưng không thể tìm thấy), nhưng làm cách nào tôi có thể gửi tệp (.exe nếu có thể) qua mạng đến một máy tính khác được kết nối với mạng ? Tôi đã thử ổ cắm nhưng tôi chỉ có thể gửi dây và tôi đã cố gắng để tìm hiểu ftplib nhưng tôi không hiểu nó ở tất cả hoặc nếu ftp là ngay cả những gì tôi đang tìm kiếm, vì vậy tôi đang ở một bế tắc hoàn toàn. Bất kỳ đầu vào được đánh giá cao (thậm chí nhiều hơn như vậy nếu ai đó có thể giải thích FTP, nó giống như ổ cắm? Tất cả các ví dụ tôi đã thấy không có một chương trình máy chủ mà khách hàng có thể kết nối.)Làm thế nào để chuyển tệp giữa hai máy tính được kết nối trong python?

+2

Chắc chắn có thể làm điều này với ổ cắm thông thường. Bạn đã thử gì? –

+0

Bạn chỉ nên sử dụng 'scp' hoặc thậm chí 'rsync' – wim

Trả lời

5

Một số mã ví dụ đơn giản cho phía gửi:

if os.path.exists(df): 
    with open(df, 'rb') as f: 
    packet = f.read(blocksize) 

    while packet != '': 
     conn.send(packet) 

     packet = f.read(blocksize) 

đâu:

df = 'path/to/data/file' 
blocksize = 8192 # or some other size packet you want to transmit. 
       # Powers of 2 are good. 
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
+0

ok cảm ơn, vì vậy là FTP không cần thiết sau đó? Tôi vẫn không thực sự hiểu những gì nó được sử dụng cho – Baboon

+1

@Baboon - FTP là một giao thức chuyên biệt cho việc chuyển tập tin, vâng. Nó bao gồm một số tiện ích mà máy khách/máy chủ đồng ý - thừa nhận, cập nhật trạng thái, thử lại, đồng thời, vv Bạn có thể đọc toàn bộ thông số trong RFC này: https://www.ietf.org/rfc/rfc959.txt.Tuy nhiên, FTP không phải là cách duy nhất để chuyển một tập tin, và sử dụng ổ cắm để truyền dữ liệu chắc chắn là có thể. Thông thường, Máy chủ và Máy khách cần đồng ý về từ vựng/hộp thoại và biết cách đồng ý khi tệp đã được chuyển hoàn toàn. –

6

A. Tôi sử dụng SimpleHTTPServer cho điều này đôi khi:

python -m SimpleHTTPServer 

... sẽ phân phối tệp trong thư mục hiện tại trên cổng 8000. Mở trình duyệt web của bạn trên máy tính khác và tải xuống bất kỳ thứ gì bạn muốn.

Để biết địa chỉ IP của máy tính của bạn, bạn có thể sử dụng (trong Ubuntu) ifconfig, ví dụ:

$ ifconfig 
enp0s31f6 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx 
      inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0 

Sau đó, trong máy tính khác, bạn gửi cho trình duyệt: http://10.0.0.3:8000.

B. Nếu bạn đã bật SSH, bạn có thể sử dụng paramiko để kết nối và chuyển giao SFTP bất cứ điều gì bạn muốn.

+0

+1 cho hai phần kiến ​​thức có giá trị mà bạn vừa thêm vào tiết mục của mình! – Thanatos

3

ZeroMQ giúp để thay thế ổ cắm.

Bạn có thể gửi toàn bộ tệp trong một lệnh.

Một ZMQ 'bên' có thể được viết bằng bất kỳ ngôn ngữ chủ yếu và cho một phần mềm ZMQ-powered nhất định, nó không có vấn đề gì bên kia nó viết bằng

Từ trang web của họ:.

Nó cung cấp cho bạn các ổ cắm mang toàn bộ thông điệp trên các phương tiện vận tải khác nhau như như trong quá trình, liên tiến trình, TCP và multicast. Bạn có thể kết nối ổ cắm N-to-N với các mẫu như fanout, pub-sub, nhiệm vụ phân phối và trả lời yêu cầu.

Các vấn đề liên quan