QTcpServer ::comingConnection (qintptr socketDescriptor) возможно ли соединение с указанным сокетом?

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. Мне нужно знать, кто соединяется с сервером. по этой причине я хочу подключиться обратно, но как? там в любом случае? или нужно подождать, пока я получу данные (приветственное сообщение) из подключенного сокета (пользователя)?

1

Решение

Я просто случайно наткнулся на эту старую ветку с той же проблемой. И я только что нашел решение, поэтому я решил опубликовать здесь на случай, если у кого-то есть аналогичная проблема.

Чтобы получить актуальный 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();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]