Я пытаюсь отправить 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
не дает вам общий файл ввода/вывода. Он используется для получения свойств мультимедиа.
Вы можете использовать только обычные функции открытия/закрытия, чтения/записи.
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",' термометр ') voice.write (ALLDATA)' поднимает мне ошибку -wave.Error: файл не запускается с идентификатором RIFF – user4719989
Я изменил 'send' на' sendall'. Первое не гарантирует отправку всех байтов (и их нужно повторить с оставшимися байтами). Последний отправляет все байты. Он не требует повторных попыток. – blackpen
На стороне клиента не выполняйте строковые операции, такие как 'alldata + = data;'. Я не думаю, что они безопасны в байтовых массивах. – blackpen
Try 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)
он поднимает меня ошибка error-AttributeError: объект '_socketobject' не имеет атрибута 'sendfile' – user4719989
Я использую windows ir его вопрос – user4719989
socket.sendfile() не выходит в Python 2.7. – blackpen
код я писал выше, my_socket.send(), wavefile = открыт (...). read() – user4719989