PyQT4异步QTcpServer(如何创建事件循环) 试图将C++编写的服务器转换为Python。服务器被写为异步/非阻塞。C++中的工作似乎不想在Python 中为我工作。

PyQT4异步QTcpServer(如何创建事件循环) 试图将C++编写的服务器转换为Python。服务器被写为异步/非阻塞。C++中的工作似乎不想在Python 中为我工作。,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我正在使用PyQT4。我读过Python,你必须创建事件循环或类似的东西,任何想法都非常感谢 我应该提到的是,似乎不起作用的是从未调用Class Server中的incomingConnection函数 *干杯 import sys from PyQt4.QtCore import * from PyQt4.QtNetwork import * class Client(QObject): def __init__(self, parent=None): QObjec

我正在使用PyQT4。我读过Python,你必须创建事件循环或类似的东西,任何想法都非常感谢

我应该提到的是,似乎不起作用的是从未调用Class Server中的incomingConnection函数

*干杯

import sys
from PyQt4.QtCore import *
from PyQt4.QtNetwork import *


class Client(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self)
        QThreadPool.globalInstance().setMaxThreadCount(15)

    def SetSocket(self, Descriptor):
        self.socket = QTcpSocket(self)
        self.connect(self.socket, SIGNAL("connected()"), SLOT(self.connected()))
        self.connect(self.socket, SIGNAL("disconnected()"), SLOT(self.disconnected()))
        self.connect(self.socket, SIGNAL("readyRead()"), SLOT(self.readyRead()))

        self.socket.setSocketDescriptor(Descriptor)
        print "Client Connected from IP %s" % self.socket.peerAddress().toString()

    def connected(self):
        print "Client Connected Event"

    def disconnected(self):
        print "Client Disconnected"

    def readyRead(self):
        msg = self.socket.readAll()
        print msg


class Server(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self)

    def incomingConnection(self, handle):
        print "incoming"
        self.client = Client(self)
        self.client.SetSocket(handle)

    def StartServer(self):
        self.server = QTcpServer()
        if self.server.listen(QHostAddress("0.0.0.0"), 8888):
            print "Server is awake"    
        else:
            print "Server couldn't wake up"


def main():
    app = QCoreApplication(sys.argv)
    Server().StartServer()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

incomingConnection
未被调用,因为调用了
qtcserver
函数的基本实现。由于
incomingConnection
是一个虚拟函数,您只需将您的分配给QTcpServer的incomingConnection属性,如下所示:

class Server(QObject):
    def __init__(self, parent=None):
        QObject.__init__(self)

    def incomingConnection(self, handle):
        print "incoming"
        self.client = Client(self)
        self.client.SetSocket(handle)

    def StartServer(self):
        self.server = QTcpServer()
        self.server.incomingConnection = self.incomingConnection
        if self.server.listen(QHostAddress("0.0.0.0"), 8888):
            print "Server is awake"    
        else:
            print "Server couldn't wake up"
您可以查看PySide的文档,因为它比PyQt更具Python风格,目前仅在此处托管:

对于这个图书馆来说,情况似乎并非如此;也许您最好使用基本套接字和线程。