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

SLOTで覚えている、ではなく、いくつかを使用する必要がありますclient。 今のところ、を使用すると、以前のクライアントはすべて失われます。それらをいくつかに保存する必要があります。startReadselectedClientselected_client()
client = server->nextPendingConnection()QList<QTcpSocket*>

于 2012-12-11T14:38:37.597 に答える