Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本Qt tcp服务器应用程序仅显示选定的客户端消息_Qt_Tcp_Tcpclient_Tcplistener - Fatal编程技术网

基本Qt tcp服务器应用程序仅显示选定的客户端消息

基本Qt tcp服务器应用程序仅显示选定的客户端消息,qt,tcp,tcpclient,tcplistener,Qt,Tcp,Tcpclient,Tcplistener,我正在用qt开发一个简单的tcp服务器。这没有问题。但问题是,我已经在列表框中列出了每个连接的客户机,我只想从列表框中看到来自所选客户机的传入数据,但我只能看到最后连接的客户机的消息。 这是密码, 这是构造函数部分 server = new QTcpServer(); client = new QTcpSocket(); connect(server, SIGNAL(newConnection()),this, SLOT(acceptConnection())); ser

我正在用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()部分

这是listWidget项的selected项事件

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

char缓冲区[1024]={0};
客户端->读取(缓冲区,客户端->字节可用();
qDebug()txtRead->插入明文(缓冲区);
如何选择特定的客户端并显示其消息?
提前感谢。

您不应该在
startRead
中使用
client
,而应该在
selected\u client()
插槽中使用一些您记得的
selectedClient

现在,当您使用
client=server->nextPendingConnection()
时,您将丢失以前的所有客户端。您应该将它们保存到一些
QList

ui->txtRead->clear();
    selected_client_index = ui->listWidget->currentIndex().row();
    connect(client, SIGNAL(readyRead()),this, SLOT(startRead()));
   char buffer[1024] = {0};
   client->read(buffer, client->bytesAvailable());
   qDebug() << buffer;
   ui->txtRead->insertPlainText(buffer);