Qt5 QTcpSocket派生类和QTcpServer

时间:2013-11-28 00:09:49

标签: c++ qt5 qtcpsocket qtcpserver

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

然后只是将你从nextPendingConnection获得的套接字转发到你的QTcpSocket子类。