wavファイルをソケット経由で送信しようとしています。ソケット経由でwavファイルを送信
私はエラーを取得する:
TypeError: must be string or buffer, not instance
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'rb')
my_socket.sendall(waveFile)
wavファイルをソケット経由で送信しようとしています。ソケット経由でwavファイルを送信
私はエラーを取得する:
TypeError: must be string or buffer, not instance
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'rb')
my_socket.sendall(waveFile)
wave
はあなたの一般的なファイルI/Oを与えるものではありません。メディアプロパティを取得するために使用されます。
通常のオープン/クローズ、読み取り/書き込みだけで使用できます。
sender.py:
import socket
(HOST,PORT)=('localhost',19123)
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((HOST,PORT))
with open('input', 'rb') as f:
for l in f: s.sendall(l)
s.close()
receiver.py:私は上記に書いた
import socket
(HOST,PORT) = ('localhost',19123)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT)); s.listen(1); conn, addr = s.accept()
with open('output','wb') as f:
while True:
l = conn.recv(1024)
if not l: break
f.write(l)
s.close()
クライアントコード: のデータながら: ALLDATA + =データ データ= client_socket.recv(1024) 声=オープン( "voice.p"、「WB ') voice.write(ALLDATA)' は は私にエラーが発生します-wave.Error:ファイルがRIFF idで始まらない – user4719989
'send'を' sendall'に変更しました。前者は、すべてのバイトを送信する保証はなく(残りのバイトで再試行する必要があります)。後者はすべてのバイトを送信します。再試行は必要ありません。 – blackpen
クライアント側では、 'alldata + = data;'のような文字列操作をしないでください。私は彼らがバイト配列で安全だとは思わない。 – blackpen
はsocket.sendfile(file, offset=0, count=None)
を試してみてください。
Send a file until EOF is reached by using high-performance
os.sendfile
…
そして、あなたはあなたが生のバイナリデータを送信しているようwave.open(...)
でファイルを開くためにしたくありません。
だから、あなたはどうなる:
with open(WAVE_OUTPUT_FILENAME, 'rb') as wave_file:
my_socket.sendfile(wave_file)
エラーエラーが発生しました - AttributeError: '_socketobject'オブジェクトに 'sendfile'属性がありません – user4719989
私は窓を使っています。 – user4719989
socket.sendfile()はPython 2.7では終了しません。 – blackpen
コード、my_socket.send()、wavefile =オープン(...)。 – user4719989