我正在使用 PyQt5 套接字编写服务器/客户端代码,遇到了奇怪的行为 首先,我从 QTCPSocket 派生了一个类,以便我将套接字的使用抽象到我的数据帧中,使用加密,..等在发送数据之前 所以,让这个类 = mySocket,它是从 QTCPSocket 继承的类
mySocket 在其初始化中有一些变量,例如:self.key。就像我在所有套接字中所做的那样,我将它的现成信号连接到我的名字插槽:rxdata
现在,问题来了。 在rxdata中,当我尝试获取发送方对象(使用 self.sender(( (时,它返回的是 QTCPSocket 类型的对象,而不是我期望的 mySocket 对象。我不明白
我尝试使用 qtcpsocketObj 转换返回的 QTCPsocket。类=我的套接字 但现在的问题是mySocket。init((显然没有被调用,像 self.key 这样的变量不会被定义。
我能做些什么来克服这个问题?
经过大量的搜索和调试,
问题不是来自self.sender((。 问题是 QTCPServer 对象返回 QTCPSocket,并且像我一样使用 _class_(( 强制转换它不是正确的方法。
解决方案是从 QTCPServer 派生一个类,而不是让它返回 QTCPSocket,它将返回 mySocket 类对象(细节在文档中有很好的解释( 下面是一个示例代码:
class myQTCPServer(QTcpServer):
def __init__(self,parent=None):
super(myQTCPServer, self).__init__(parent)
def incomingConnection(self,socketDescriptor):
newSock = mySocket(self)
newSock.setSocketDescriptor(socketDescriptor)
self.addPendingConnection(newSock)