2017-10-29 21 views
0

クライアントがサーバのファイルをダウンロードするクライアントサーバプログラムを作成しています。 localhostでは正常に動作しますが、問題はlocalhost接続以外で発生します。私はグーグルで試してみましたが、(以前は同じ問題に提案されていた)解決策はありませんでした。私は別の解決策を試してみたが、それらのどれも働いたpythonソケットで不完全なデータ転送

def upload(sock): # server.py 
    filename = str(sock.recv(4096)).split(' end')[0] 
    if os.path.exists(filename): 
     sock.send('YES') 
     sock.send(str(os.path.getsize(filename)) + ' end') 
     foo = open(filename, 'rb') 
     upbytes = foo.read(4096) 
     sock.sendall(upbytes) 
     while upbytes != '': 
      upbytes = foo.read(4096) 
      sock.sendall(upbytes) 
     foo.close() 
     print "\tUpload Complete !" 
    else: 
     sock.send('NO') 


def download(sock, filename): #client.py 
    sock.send(filename + ' end') 
    if sock.recv(4096) == 'YES': 
     filesize = int(str(sock.recv(4096)).split(' end')[0]) 
     print filesize, 'filesize' 
     foo = open('downloaded_' + os.path.basename(filename), 'wb') 
     downbytes = sock.recv(4096) 
     foo.write(downbytes) 
     downlen = len(downbytes) 
     while downlen < filesize: 
      downbytes = sock.recv(4096) 
      if not downbytes: 
       break 
      foo.write(downbytes) 
      downlen += len(downbytes) 
     foo.close() 
     print 'filesize', filesize, 'downlen', downlen 
     print "\t\tDownload Complete !\n" 
    else: 
     print "\t\tFile not found ! <" + filename + '>' 

は、ここに私のコードです!

+0

こんにちは。ここで質問を正しくすることは本当に重要です。 [ask]と[mcve]を見てください。ありがとう。質問に正しくタグを付けることは本当に重要です。質問はPythonコードにのみ関連するように見えるので、[vb.net]タグを追加することは適切ではありません。再度、感謝します。 –

+0

@DavidWilsonよろしくお願いします。もっと重要なのは、この問題の解決策を知ることは素晴らしいことです。私はここでさらに移動するためにここで詰まっています:( –

+0

あなたが現在のディレクトリからファイルをホストする 'python -m http.server'(Python 3)を実行する場合 –

答えて

0

ソケットには、メッセージを使用しているため、「メッセージ」という概念はありません。 'YES''some_filename'とソケットに差し込むと、recv(4096)を実行したときに'YES'と表示され、'YESsome_f'...ではなく、チャンス(ローカル接続の助けを借りて)が得られます。

ストリームを解析して自分自身(データを格納)にするか、メッセージ(HTTPやZMQなど)を含むレイヤーを追加する必要があります。

ファイルをホストする場合は、python -m http.serverを使用してファイルをホストできます。

+0

なぜですか?それはlocalhost上で動作し、他のものではありませんか?そのファイルは転送されていません、それは不完全なだけが送信されます!私は一緒に作業したことがあるか、ソケットで何をしたいかの選択肢があります –

関連する問題