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

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

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

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


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

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

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

最佳答案

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

然后,只需将您从nextPendingConnection获得的套接字转换为QTcpSocket子类即可。

关于c++ - Qt5 QTcpSocket派生类和QTcpServer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20255534/

10-12 05:54