0

我正在用 qt 开发一个简单的 tcp 服务器。没有问题。但问题是,我已经在列表框中列出了每个连接的客户端,我只想从列表框中查看来自所选客户端的传入数据,但我只能看到最后连接的客户端的消息。这是代码,这是构造函数部分

server = new QTcpServer();
    client = new QTcpSocket();
    connect(server, SIGNAL(newConnection()),this, SLOT(acceptConnection()));
    server->listen(QHostAddress::Any, ui->txtPort->text().toInt(bool(),10));
    if(server->isListening())
    {
        ui->statusBar->showMessage("Server Started..");
    }
    else
    {
        ui->statusBar->showMessage("Server Not Started..");
    }

    connect(client,SIGNAL(disconnected()),this,SLOT(client_disconnected()));

    connect(ui->listWidget,SIGNAL(clicked(QModelIndex)),this,SLOT(selected_client()));

这是 acceptConnection() 部分

client = server->nextPendingConnection();

    ui->listWidget->insertItem(client_count,client->peerAddress().toString());
    client_count++;

这是 listWidget 项目的选定项目事件

ui->txtRead->clear();
    selected_client_index = ui->listWidget->currentIndex().row();
    connect(client, SIGNAL(readyRead()),this, SLOT(startRead()));

最后是 startRead() 部分

   char buffer[1024] = {0};
   client->read(buffer, client->bytesAvailable());
   qDebug() << buffer;
   ui->txtRead->insertPlainText(buffer);

如何选择特定客户端并显示其消息?提前致谢。

4

1 回答 1

1

你不应该使用clientin startRead,而是一些你在SLOTselectedClient中记住的。 至于现在,当您使用 时,您将失去任何以前的客户。您应该将它们保存到一些.selected_client()
client = server->nextPendingConnection()QList<QTcpSocket*>

于 2012-12-11T14:38:37.597 回答