PyAudio в сочетании с сокетами вызывает WinError 10093 - PullRequest
0 голосов
/ 28 мая 2019

Я пишу скрипт на python, чтобы получить файл с сервера и воспроизвести его с помощью библиотеки pyaudio. Я посылаю команду tcp с сервера, которая запускает FTP-соединение с сервером, а затем воспроизводит ее. Я продолжаю цикл while, поэтому его можно повторять по мере необходимости, пока он не получит другую команду tcp. Однако после двух случаев воспроизведения я получаю сообщение об ошибке: OSError: [WinError 10093] Либо приложение не вызвало WSAStartup, либо произошел сбой WSAStartup

У меня есть две функции: ftpFetcher и playFile. Кажется, что каждый из них хорош сам по себе. В отдельном файле я смог непрерывно вызывать функцию playFile. Удаление функции playFile, и я могу без проблем вызывать ftpFetcher столько, сколько мне нравится.

Во-первых, ftpFetcher

def ftpFetcher(IPaddress, filename):
    ftp = FTP(IPaddress, "root", "pass")
    print('FTP Connected!')
    with open(filename, 'wb') as f:
        ftp.retrbinary('RETR ' + filename, f.write)
        f.close()
    print('Transfer Complete!')
    ftp.close()

Затем функция playFile

def playFile(filename):
    wavFile = wave.open(filename, 'rb')
    p = pyaudio.PyAudio()
    stream = p.open(format=p.get_format_from_width(wavFile.getsampwidth()),
                    channels=wavFile.getnchannels(),
                    rate=wavFile.getframerate(),
                    output=True)
    data = wavFile.readframes(audioChunk)

    while data != b'':
        stream.write(data)
        data = wavFile.readframes(audioChunk)
    print('Play finished!')
    stream.stop_stream()
    stream.close()
    wavFile.close()
    p.terminate()

И этот цикл вызывает проблемы

    while loop == 0:

        print('Waiting for command...')

        clientSock, clientAddr = serverSock.accept()
        print('connection from: ', clientAddr)
        data = clientSock.recv(64)
        print('data: ', data.decode())


        if data.decode() == 'play':
            ftpFetcher(clientAddr[0], filename)
            playFile(filename)


        elif data.decode() == 'quit':
            print('Exiting Program!')
            loop = 1

И снова я запускаю это и отправляю сообщение воспроизведения один раз, и это нормально. Дважды, и это проигрывает просто отлично, но я в конечном итоге с этой полной ошибкой:

Файл "C: \ Users \ cdunn \ Documents \ InfoCOMM \ InfoCOMM.py", строка 73, в clientSock, clientAddr = serverSock.accept () Файл "C: \ Users \ cdunn \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ socket.py", строка 212, принять fd, addr = self._accept () OSError: [WinError 10093] Либо приложение не вызвало WSAStartup, либо произошел сбой WSAStartup

...