2012-01-04 3 views
5

これは以前に回答されているかどうかわかりませんが(オンラインに見えましたが見つかりませんでしたが)、ネットワーク経由でネットワークに接続されている別のコンピュータにファイル(可能であれば.exe)を送信できます?私はソケットを試しましたが、私は文字列を送ることしかできませんでした。ftplibを勉強しようとしましたが、私はそれを全く理解していないか、ftpが探しているものであっても完全に止まっています。私が見たすべての例には、クライアントが接続できるサーバプログラムがありません。Pythonで2つの接続されたコンピュータ間でファイルを転送するにはどうすればよいですか?

+2

通常のソケットではこれが可能です。何を試しましたか? –

+0

ちょうど私のレパートリーに追加した2つの貴重な知識のために、 'scp'または' rsync' – wim

答えて

5

送信側のためのいくつかの単純なコード例:

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

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

     packet = f.read(blocksize) 

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ありがとうございますので、FTPは必要ありませんか?私はまだそれが使用されていることを本当に理解していません – Baboon

+1

@Baboon - FTPはファイル転送のための特別なプロトコルです、はい。これには、クライアント/サーバが同意するいくつかの利便性が含まれています - 承認、ステータスの更新、再試行、並行性などがあります。このRFCの仕様全体を読むことができます:https://www.ietf.org/rfc/rfc959.txt。しかし、FTPだけでファイルを転送する方法ではなく、ソケットを使用してデータを転送することも可能です。通常、サーバーとクライアントはボキャブラリー/ダイアログに同意し、ファイルが完全に転送された時点でどのように合意するかを知る必要があります。 –

6

A.私はSimpleHTTPServerを使用しています。ポート8000​​上の現在のディレクトリ内のファイルは、あなたが好きな他のコンピュータやダウンロードにWebブラウザを開き役立つ

python -m SimpleHTTPServer 

...:この時々のために。

お使いのコンピュータのIPアドレスを知るために、あなたは(Ubuntuの中で)ifconfigコマンドを使用することができ、例えば:http://10.0.0.3:8000

$ 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 

その後、他のコンピュータでは、あなたがにブラウザを送信します。

B. SSHを有効にしている場合は、paramikoを使用して任意のSFTP転送を使用できます。

+0

+1を使うべきです! – Thanatos

3

ZeroMQはソケットを交換するのに役立ちます。

ファイル全体を1つのコマンドで送信できます。 A ZMQ「党」はすべての主要な言語で記述することができ、与えられたZMQ搭載のソフトウェアのために、で書かれたものをもう一方の端は問題does notの

自分のサイトからは:。

インプロセス、プロセス間、TCP、マルチキャストなどのさまざまなトランスポートを介して、メッセージ全体を伝送するソケットを提供します。 ファンアウト、pub-sub、タスク 配信、リクエストリプライなどのパターンでN対Nのソケットを接続できます。

関連する問題