0

C++で記述されたサーバーをPythonに変換しようとしています。サーバーは非同期/非ブロッキングになるように作成されました。C ++で機能するものは、Pythonでは機能したくないようです。

PyQT4を使用しています。私はPythonを読みました。イベントループなどを作成する必要があります。アイデアは大歓迎です。

動作しないように見えるのは、ClassServerの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()
4

1 に答える 1

1

incomingConnectionQTcpServer関数の基本実装が呼び出されるため、は呼び出されません。重要な関数と同様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"

現在ここでのみホストされているPyQtよりもはるかにPythonicであるため、PySideのドキュメントを確認できます: http ://srinikom.github.com/pyside-docs/

于 2012-11-04T07:53:53.497 に答える