微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QTcpClient成功连接,但未连接到我的服务器它在哪里连接?

如何解决QTcpClient成功连接,但未连接到我的服务器它在哪里连接?

| 我已经使用Qt的Tcp套接字API成功构建了瘦客户机/服务器。我知道它的效果很好,因为我已经通过网络发送了大量数据并进行了验证。但是,我的项目经理想要一套单元测试,我正在使用Qt的测试库来实现它们。 无论如何,我正在尝试设置一些虚拟服务器以仅从QTcpsocket接收数据,以在单元测试中验证sendData()方法。当我连接测试插座时,表明它已连接,但从未调用用于连接虚拟服务器及其虚拟插座的插槽! 有人可以在这里看到我在做什么吗? (我将代码精简到了测试类中似乎已损坏的部分) 来自tst_tcpcommsocket.h
#ifndef TST_TCPCOMMSOCKET_H
#define TST_TCPCOMMSOCKET_H

#include <QtCore/QString>
#include <QtTest/QtTest>

#include <iostream>

#include <QTcpsocket>
#include <QTcpserver>

class TcpCommSocketTest : public QObject
{
    Q_OBJECT

private:
    QTcpsocket* qTestSocket;
    QTcpsocket* qDummySocket;
    QTcpserver* qDummyServer;

public:
        TcpCommSockettest();

public slots:
    void connectDummyServer();

private Q_SLOTS:
    void initTestCase();    
    void sendDatatest();    
    void cleanupTestCase();
};

#endif // TST_TCPCOMMSOCKET_H
来自tst_tcpcommsocket.cpp
#include \"tst_tcpcommsocket.h\"

void TcpCommSocketTest::connectDummyServer()
{
    cout << \"connection attempt\" << endl;
    qDummySocket = qDummyServer->nextPendingConnection();
}

void TcpCommSocketTest::initTestCase()
{
    qDummySocket = NULL;
    qDummyServer = new QTcpserver();
    qDummyServer->listen( QHostAddress(\"127.0.0.1\"),9000 );
    connect( qDummyServer,SIGNAL(newConnection()),SLOT(connectDummyServer()) );

    qTestSocket = new QTcpsocket();
    qTestSocket->connectToHost( QHostAddress(\"127.0.0.1\"),9000 );

    QVERIFY( qTestSocket->waitForConnected( 5000 ) );
    QVERIFY( qTestSocket->state() == QTcpsocket::ConnectedState );
}

void TcpCommSocketTest::sendDatatest()
{
    int i=0;
    QVERIFY( qDummySocket != NULL );
}

QTEST_MAIN(TcpCommSocketTest);
测试运行的输出
********* Start testing of TcpCommSocketTest *********
Config: Using QTest library 4.7.3,Qt 4.7.3
PASS   : TcpCommSocketTest::initTestCase()
FAIL!  : TcpCommSocketTest::sendDatatest() \'qDummySocket != NULL\' returned FALSE. ()
   Loc: [-]
cleanup
PASS   : TcpCommSocketTest::cleanupTestCase()
Totals: 2 passed,1 Failed,0 skipped
    

解决方法

        当“ 3”创建一个QApplication并运行您的所有测试时,它按顺序进行,而不是事件循环。因此,尽管您的套接字确实可以连接到服务器(意味着
qTestSocket->waitForConnected()
返回
true
),但是由于该应用不会返回事件循环,因此
QTcpServer
的信号不会发出,而
TcpCommSocketTest::connectDummyServer()
也不会被调用。 尝试在
initTestCase()
的末尾向
qApp->processEvents()
拨打电话。应该叫ѭ10。     ,        您可能正在连接到较早启动的服务器实例。使用过程监视器四处摸索,以确保您没有任何流浪实例。您的测试设置是否会自动启动并关闭虚拟服务器?可能是测试成功启动了服务器,但未能杀死它。 另外,从127.0.0.1起,虚拟服务器与测试代码在同一台计算机上运行,​​对吗?     ,        确认ѭ11的返回值。如果服务器确实正在侦听端口9000,则应返回ѭ5。如果服务器返回ѭ13,则可能是端口9000被另一个进程阻塞,并且无法侦听。在这种情况下,您的“ 14”连接到该其他进程而不是您自己的服务器。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。