Я делаю простую программу клиентского сервера для школьного проекта в Qt, но у меня возникли проблемы с обработкой нескольких новых подключений к серверу. Код у меня есть для новых подключений до сих пор является довольно простым:Лучший способ обработки нескольких сокетов в приложении Qt-сервера?
void LoginServer::newConnection()
{
logSock = server->nextPendingConnection();
if(!logSock->waitForConnected(500))
{
qDebug() << "Connection failed";
}else
{
qDebug() << "It worked!";
connect(logSock, SIGNAL(readyRead()),this, SLOT(readData()));
}
}
Один метода, который я видел на интернет толкал новые подключения к структуре данных, таким как вектор, и регулировать их из одного контейнера. Одна из проблем, с которой я столкнулась, заключается в том, что если я подключаю все разные сокеты к одному слоту для чтения данных, есть ли какой-нибудь изящный способ сказать, какой сокет отправил сигнал?
Другой способ, который я рассматривал, состоял в том, что когда был выпущен метод ReadRead(), я мог искать список сокетов, чтобы увидеть, у которого есть bytesAvailable, но это кажется слишком упрощенным решением для меня. Кроме того, если два сокета отправили данные одновременно, программа может определить неправильный сокет.
Еще один вариант, который я рассматривал, был переопределением readyRead(), чтобы включить ссылку на себя в сигнал, а затем я понял, что у меня нет первой идеи, как это сделать.
connect(logSock, SIGNAL(readyRead(QTcpSocket*)),this, SLOT(readData(QTcpSocket*)));
Любые советы были бы весьма полезными.
Это работает! Благодаря! –