我创建了一个 hello-world 程序来帮助我理解 QTcpServer 和 QTcpSocket 是如何工作的。在其中,QTcpServer 接受新连接并将它们的readyRead()
信号连接到MainWindow::onNewData()
它们的新数据附加到纯文本控件的插槽。
问题是可以同时打开多个套接字。所以当我得到readyRead()
信号并且我想用 读取数据时readAll()
,我怎么知道是哪个套接字发出的呢?
这是代码的相关部分。我根本不在这里存储 QTcpSocket 指针,但即使我这样做了,我仍然不知道它们中的哪一个发出了信号。
// constructor
server = new QTcpServer(this);
connect(server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
server->listen(QHostAddress::LocalHost, 3333);
void MainWindow::onNewConnection()
{
QTcpSocket* socket = server->nextPendingConnection();
connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
connect(socket, SIGNAL(readyRead()), this, SLOT(onNewData()));
}
void MainWindow::onNewData()
{
ui->plainTextEdit->appendPlainText(WHICH_SOCKET_EMITTED_IT()->readAll());
}