2017-09-22 6 views
0

私は画像転送サーバで作業していましたが、複数の画像を保存する際に問題が発生しました。サーバーは、クライアント側のソケットが閉じて、そのクライアントのみが1つのイメージを送信できるようにする場合、複数のイメージ(複数のクライアントから)を保存できます。また、ファイルサイズを送信しようとしましたが、ファイルサイズが満たされたときに保存を停止しましたが、何らかの理由で画像を開くことが不可能になりました。Python 3ソケットプログラミング:複数の画像を保存する

クライアントコード

f = open(filename, "rb") 
while True: 
    data = f.read(512) 
    if not data: 
     break 
    s.send(data) 
f.close() 

Serverコード

for client in clients: 
    while True: 
     data = client[0].recv(512) 
     if data == "": 
      break 
     f.write(data) 
+0

[MCVE]を入力してください。それは答えるのに役立ちます:どのように画像ファイルのサイズをエンコードしましたか?どのようにファイルサイズを送信しましたか?どのように受け取ったのですか?また、いくつかの関連するヒントについては、この回答が表示されることがあります。https://stackoverflow.com/q/45620230/1076479 –

答えて

-1

画像の転送が完了した後に、クライアントから空の文字列を送信してください。私は問題は、サーバーが送信されるイメージの数を区別しないという事実にあると信じています。

クライアント:

for file in files: 
    with open(filename, "rb") as f: 
     data = f.read() 
     while data: 
      s.send(data[:512]) 
      data = data[512:] 
     s.send('') 

サーバー:

from functools import partial 

while True: 

    with open(filename, "rb") as f: 
     data = b"".join(iter(partial(client[0].recv, 512), b'')) 
     f.write(data) 
+0

(1)空の文字列を送信することは、ストリームソケットでは何もしません。 (2)1つのファイル全体を読み書きすることは急いでしまいました。サイズが200GBの場合はどうなりますか? (3) 'functools'の使用は、問題を解決するために何もしないで、初心者を混乱させるだけです。 –

関連する問題