PyAudio与套接字结合会导致WinError 10093

时间:2019-05-28 20:22:50

标签: python windows sockets pyaudio

我正在编写一个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失败

0 个答案:

没有答案