我试图了解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机制。

最佳答案

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处于空闲状态。

在多线程应用中尝试。

关于c++ - 无法使QTcpSocket/QTcpServer一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24910377/

10-11 22:08