QTcpServerとQTcpSocketがどのように機能するかを理解するのに役立つhello-worldプログラムを作成しました。その中で、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());
}