【问题标题】:Can't make QTcpSocket/QTcpServer work together不能让 QTcpSocket/QTcpServer 一起工作
【发布时间】:2014-07-23 12:21:37
【问题描述】:

我试图了解 QTcpSocket 和 QTcpServer 如何协同工作。所以我写了这个简单的例子,它在 localhost 上启动服务器和客户端套接字:

QTcpServer server;
qDebug() << "Listen: " << server.listen( QHostAddress::Any, 10590);

usleep( 500000); //1/2 sec

QTcpSocket client;
client.connectToHost( QHostAddress( "127.0.0.1"), 10590);

usleep( 5000000);
qDebug() << "Client socket available: " << client.isValid();
qDebug() << "Pending connections:" << server.hasPendingConnections();

我得到了这个输出:

Listen:  true 
Client socket available:  true 
Pending connections false 

为什么没有挂起的连接?

PS> 我不想使用 SLOT/SIGNALS 机制。

【问题讨论】:

    标签: c++ qt4.8 qtcpsocket qtcpserver


    【解决方案1】:
    int main( )
    {
      QTcpServer server;
      qDebug() << "Listen: " << server.listen( QHostAddress::Any, 10590);
    
      usleep( 5000000);
    
      QTcpSocket client;
      client.connectToHost( QHostAddress( "127.0.0.1"), 10590);
    
      usleep( 5000000);
    
      qDebug() << "Client socket connected: " << ( client.state( ) == QTcpSocket::ConnectedState );
      qDebug() << "Pending connections:" << server.hasPendingConnections();
    }
    

    输出:

    Listen:  true
    Client socket connected:  false
    Pending connections: false
    

    这是因为QTcpServer 无法回答QTcpSocket 查询...两者都在同一个线程上,如果QTcpSocket 正在执行,QTcpServer 处于空闲状态。

    在多线程应用中试试。

    【讨论】:

    • 谢谢@eferion,我不知道他们不能生活在一个线程中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2015-10-20
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多