1
void server::incomingConnection(qintptr socketDescriptor) {

    qDebug() << "incoming connection";
    connection* new_connection = new connection(this);
    new_connection->set_socket_descriptor(socketDescriptor);

    connect(new_connection, SIGNAL(ready_read()), this, SLOT(ready_read()));
    connect(new_connection, SIGNAL(disconnected()), this, SLOT(disconnected()));

    emit signal_new_connection(new_connection);
} 

服务器类继承自 QTcpServer,连接类有一个 QTcpSocket 作为成员和一些关于想要连接的用户的信息(名称、IP、ID ...)

我的问题是我对new_connection 一无所知。我需要知道谁在连接服务器。出于这个原因,我想重新连接,但如何?有什么办法吗?还是必须等到我从连接的套接字(用户)收到数据(问候消息)?

4

1 回答 1

0

我只是不小心碰到了这个有同样问题的旧线程。我刚刚找到了解决方案,所以我决定在这里发帖以防有人遇到类似问题。

要获得实际QTcpSocket(发出readyRead()信号的那个),您可以使用QObject::sender()方法,例如:

void NetServer::onNewConnection() {
    QObject::connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onData()));
}
// ...
void NetServer::onData() {
    QTcpSocket *client = this->server->nextPendingConnection();
    qDebug() << "Received data from" << sender();
    // or
    qDebug() << "Received data from" << this->sender();
    // or even
    qDebug() << "Received data from" << QObject::sender();
}
于 2014-12-12T19:21:31.043 回答