我想通過套接字發送一個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
不給你我一般的文件/ 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)
它引發了我的錯誤errorError:AttributeError:'_socketobject'對象沒有屬性'sendfile' – user4719989
我正在使用windows ir其事物 – user4719989
socket.sendfile()不會在Python 2.7中退出。 – blackpen
我上面寫的代碼,my_socket.send(),wavefile =開放(...)。 read() – user4719989