2011-07-08 14 views
0

私は、TCP経由でファイルを送受信するためにPythonでソケットプログラミングを書いています。ソケットを介してデータファイルを送受信する方法は?

私はデータを送受信しているうちに、ファイルの一部も送信も受信もしていないと考えました。

ここでは、バッファのサイズに基づいてデータの一部を送信する部分です。

msg[i] = file[i].read() 
    file[i].close() 
    while 1: 
    tdata[i], msg[i] = msg[i][:buf], msg[i][buf:] 
    c.send(tdata[i]) 

    if len(msg[i]) < buf: 
     break 

データ全体を完全に送受信する方法を教えてください。

+0

ファイルのどの部分が欠落していますか?送信者または受信者にエラーが発生していますか? –

答えて

3

len(msg[i]) < bufのときに送信が停止するため、データの最後が欠落することがあります。

あなたはMSGのすべての[i]は、それを行う方が良いでしょう送信したい場合:

while msg[i]: 
    tdata[i], msg[i] = msg[i][:buf], msg[i][buf:] 
    c.sendall(tdata[i]) 

か、単に一度にそれを送信します。どのように多くのsend()が返されること

c.sendall(msg[i]) 

注意をバイトは実際に送信されたため(必ずしもすべてを送信するわけではないため)、すべてを送信する場合(通常はそうです)には代わりにsendall()を使用してください。

0

私はこのような何かをしようとするだろう:これはSimpleHTTPServerモジュールはそれをしない方法を

import shutil 

shutil.copyfileobj(open('data'), c.makefile('wb')) 

です。

関連する問題