QTcpSocket到同一对象中的QTcpSocket

时间:2018-08-15 14:04:04

标签: c++ qt qtcpsocket

我正在尝试伪造同一类的两个QTcpSocket之间的传输(这是googletest固定装置)。重点是看我是否可以在两者之间发送多条消息并再次正确提取它们。但是,似乎两个插座无法连接。我见过的与此相关的大多数文章都没有给出有效的答案,并且由于这绝对不是预期的使用方法,因此我不确定是否有简单的答案。

我用于建立连接的内容:

class TTest : public ::testing::Test, public QObject
{
    //Q_OBJECT
protected:
    QTcpServer qserv;
    QTcpSocket qtcpsock1; //send
    QTcpSocket *qtcpsock2; //rcv

    TTest() : qserv(this), qtcpsock1(this)
    {

        while (!qserv.isListening()) 
        {
            qserv.listen();
        }
        qtcpsock1.connectToHost(QHostAddress::LocalHost, qserv.serverPort());
        qtcpsock2 = qserv.nextPendingConnection();
        qtcpsock1.waitForConnected();
        if (!qtcpsock2) std::cout << "socket 2 not initialized\n";
        qserv.close();
    }
}

当前未使用的信号/插槽。

1 个答案:

答案 0 :(得分:3)

问题是应用程序的事件轮询循环将无法运行,因此不会处理任何事件,没有它,您的函数调用将无法正常工作。

简而言之,waitForConnected()调用将等待从未发生的事件。

使用Qt的自然解决方案当然是使用信号和插槽,并让正常的应用程序事件循环运行。


一个稍微相关的注释:如果要在同一进程中进行内部通信,请考虑使用(繁琐和复杂的)TCP套接字以外的其他东西。简单的消息队列?匿名管道?纯字符串或数组?