0

我正在开发一个有意义的应用程序,我将我的类包装在已实现的 QTcpSocket 周围(因为它是一个 TCP 协议,我需要能够尽可能无缝地使用原始套接字和添加的功能)。

因此,为了简单起见,我的代码结构如下:

class MyTCPSocket : public QTcpSocket
{
 Q_OBJECT
 // ....
}

class MyTCPServer : public QTcpServer
{
 Q_OBJECT
 // ....
}

对于 QTcpServer,默认的 nextPendingConnection() 函数返回一个 QTcpSocket 实例,我无法将其转换为 MyTCPSocket(据我所知,QTcpSocket 没有复制结构)。

我最好的选择是什么?我在想我可以创建一个新的 MyTCPSocket 并将套接字描述符设置为 MyTCPServer 的 nextPendingConnection() 返回的描述符,但我不确定当旧的套接字被删除时它会如何工作。

有没有更好的方法来处理这种情况?

4

1 回答 1

1

正是这样:覆盖incomingConnection但不调用基类,而是创建QTcpSocket子类的实例并setSocketDescriptor在其上使用。如果你想保持 QTcpSocket “信号行为”,也调用addPendingConnection和 emit newConnection

然后只需将您获得的套接字向下转换nextPendingConnection为您的 QTcpSocket 子类。

于 2013-11-28T23:18:15.383 回答