【发布时间】:2023-12-18 19:50:01
【问题描述】:
我在使用 QTcpSocket 时遇到问题,它没有发出任何信号:/
void NetworkInstance::run()
{
m_pSocket = new QTcpSocket();
connect(m_pSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError()));
connect(m_pSocket, SIGNAL(hostFound()), this, SLOT(socketHostLookupDone()));
connect(m_pSocket, SIGNAL(connected()), this, SLOT(socketConnected()));
connect(m_pSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
connect(m_pSocket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));
QSettings s;
s.beginGroup("network");
emit log(QString("Connection to: ").append(s.value("host").toString()).append(":").append(s.value("port").toString()));
m_pSocket->connectToHost(s.value("host").toString(), s.value("port").toInt());
s.endGroup();
exec();
}
这是我的代码,我没有看到任何错误,但没有发出已连接的信号(hostFound、已连接等)。在服务器上,我可以看到已建立连接并发送了数据,但客户端没有任何反应。 NetworkInstance 正在扩展 QThread。
【问题讨论】:
-
如果你是 QThread 的子类,“你做错了”:blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong
-
你根本不需要QThread!在所有 QTcpSocket 异步工作之后,您可以安全地在主线程中运行它。
-
我需要 QThread,我对接收到的数据进行了一些繁重的处理(是的,可以将处理本身放入 QThread,但这样更简单)。我每个线程有一个套接字,它适合我的需要。然而,公认的答案就是解决方案。
标签: qt qt5 qtcpsocket