不能让 QTcpSocket/QTcpServer 一起工作
Posted
技术标签:
【中文标题】不能让 QTcpSocket/QTcpServer 一起工作【英文标题】:Can't make QTcpSocket/QTcpServer work together 【发布时间】: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 机制。
【问题讨论】:
【参考方案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,我不知道他们不能生活在一个线程中。以上是关于不能让 QTcpSocket/QTcpServer 一起工作的主要内容,如果未能解决你的问题,请参考以下文章
QFile可以把自己的Parent设置成QHttpMultiPart,今天真是开了眼界了~