Python PyQt5中的WebSocket服务器,显然是正确的,但是我无法连接

Python PyQt5中的WebSocket服务器,显然是正确的,但是我无法连接,python,qt,websocket,pyqt,pyqt5,Python,Qt,Websocket,Pyqt,Pyqt5,我需要在pyqt5中创建一个websocket服务器,阅读5.3版本中的文档,这里有所有必要的类,在C中遵循这些示例++ 结果是: from PyQt5 import QtCore, QtWebSockets, QtNetwork class MyServer(QtCore.QObject): def __init__(self, parent=None): super(QtCore.QObject, self).__init__(parent) s

我需要在pyqt5中创建一个websocket服务器,阅读5.3版本中的文档,这里有所有必要的类,在C中遵循这些示例++ 结果是:

from PyQt5 import QtCore, QtWebSockets,  QtNetwork

class MyServer(QtCore.QObject):
    def __init__(self,  parent=None):
        super(QtCore.QObject, self).__init__(parent)
        self.server = QtWebSockets.QWebSocketServer('My Socket', QtWebSockets.QWebSocketServer.NonSecureMode)
        if self.server.listen(QtNetwork.QHostAddress.LocalHost, 1302):
            print('Connected: '+self.server.serverName()+' : '+self.server.serverAddress().toString()+':'+str(self.server.serverPort()))
        else:
            print('error')
        self.server.newConnection.connect(self.onNewConnection)

        print(self.server.isListening())

    def onNewConnection(self):
        print(self.sender())
        print("inside")
        self.server.textMessageReceived.connect(self.processTextMessage)
        self.server.binaryMessageReceived.connect(self.processBinaryMessage)
        self.server.disconnected.connect(self.socketDisconnected)

    def processTextMessage(self,  message):
        print(message)

    def processBinaryMessage(self,  message):
        print(message)

    def socketDisconnected(self):
        print('out')

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MyServer()
    sys.exit(app.exec_())

当运行isListening方法时,返回true,这使我相信此代码是正确的,但是我尝试通过javascript客户端(html5 websocket)连接,它返回一个服务器连接错误,当我尝试通过telnet(telnet localhost 1302)拍摄服务器时也会发生同样的情况.

事实上,信号有一个问题:您不必连接服务器,但需要连接客户端连接:

def连接(自):
clientConnection=self.server.nextPendingConnection()
clientConnection.disconnected.connect(clientConnection.deleteLater)
打印(self.sender())
打印(“内部”)
clientConnection.textMessageReceived.connect(self.processTextMessage)
clientConnection.binaryMessageReceived.connect(self.processBinaryMessage)
self.server.disconnected.connect(self.socketDisconnected)
然后我尝试使用html5客户端:


网袋试验
//var wsUri=“ws://echo.websocket.org/”;
var wsUri=“ws://127.0.0.1:1302”;
var输出;
函数init(){output=document.getElementById(“output”);testWebSocket();}
函数testWebSocket(){
websocket=新的websocket(wsUri);
websocket.onopen=函数(evt){onopen(evt)};
websocket.onclose=函数(evt){onclose(evt)};
websocket.onmessage=函数(evt){onmessage(evt)};
websocket.onerror=函数(evt){onerror(evt)};}
函数onOpen(evt){writeToScreen(“CONNECTED”);doSend(“WebSocket rocks”);}
函数onClose(evt){writeToScreen(“断开”);}
消息上的函数(evt){
writeToScreen('响应:'+evt.data+'');websocket.close();
}  
函数onError(evt){writeToScreen('ERROR:'+evt.data);}
函数doSend(消息){
writeToScreen(“已发送:”+消息);websocket.send(消息);
} 
函数写入屏幕(消息){
var pre=document.createElement(“p”);
pre.style.wordWrap=“断开单词”;
pre.innerHTML=消息;
output.appendChild(pre);}
addEventListener(“加载”,init,false);
网袋试验

感谢您的回复,代码中还有其他错误,如果有人需要,最终代码是:

from PyQt5 import QtCore, QtWebSockets,  QtNetwork, QtWidgets

class MyServer(QtCore.QObject):
    def __init__(self, parent):
        super(QtCore.QObject, self).__init__(parent)
        self.clients = []
        self.server = QtWebSockets.QWebSocketServer(parent.serverName(), parent.secureMode(), parent)
        if self.server.listen(QtNetwork.QHostAddress.LocalHost, 1302):
            print('Connected: '+self.server.serverName()+' : '+self.server.serverAddress().toString()+':'+str(self.server.serverPort()))
        else:
            print('error')
        self.server.newConnection.connect(self.onNewConnection)

        print(self.server.isListening())

    def onNewConnection(self):
        self.clientConnection = self.server.nextPendingConnection()
        self.clientConnection.textMessageReceived.connect(self.processTextMessage)

        self.clientConnection.binaryMessageReceived.connect(self.processBinaryMessage)
        self.clientConnection.disconnected.connect(self.socketDisconnected)

        self.clients.append(self.clientConnection)

    def processTextMessage(self,  message):
        if (self.clientConnection):
            self.clientConnection.sendTextMessage(message)

    def processBinaryMessage(self,  message):
        if (self.clientConnection):
            self.clientConnection.sendBinaryMessage(message)

    def socketDisconnected(self):
        if (self.clientConnection):
            self.clients.remove(self.clientConnection)
            self.clientConnection.deleteLater()


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    serverObject = QtWebSockets.QWebSocketServer('My Socket', QtWebSockets.QWebSocketServer.NonSecureMode)
    server = MyServer(serverObject)
    serverObject.closed.connect(app.quit)
    app.exec_()

你在mac电脑上试一试吗?如果是这样的话,您必须在一个非常简短的弹出窗口中接受传入的网络连接,而您可能错过了这个弹出窗口。netcat或telnet不适用于测试WebSocket,您的html5客户端的代码是什么?我正在windows上运行,没有端口异常请求,我已经在另一个文件中测试了运行。若telnet并没有websocket轮子,为什么可以运行echo测试?(telnet echo.websocket.org 80)我正在尝试连接简单的html5示例以及chrome插件(简单websocket客户端)