Как я могу получить доступ к QThread в QTcpServer
Я только что сделал собственную реализацию QTcpServer и перегружен incomingConnection
функция.
void Server::incomingConnection(int handle) //Server inherits from QTcpServer
{
qDebug()<<"Server::incomingConnection"<<handle;
Thread *thread = new Thread(handle,this);
connect(thread,SIGNAL(finished()),this,SLOT(deleteLater()));
thread->start();
}
В теме я делаю следующие вещи:
void Thread::run()
{
qDebug() << m_socketDescriptor << "Starting Thread";
m_socket = new QTcpSocket();
if(!m_socket->setSocketDescriptor(m_socketDescriptor))
return;
connect(m_socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
connect(m_socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
qDebug() << m_socketDescriptor << "Client connected";
exec();
}
Теперь у меня многопоточный сервер.
Но как я могу получить доступ к подключенным клиентам и отправить им данные через. графический интерфейс?
Заранее спасибо!
С уважением
1 ответ
Вам необходимо использовать некоторые функции QIODevice, такие как write
или же <<
отправить данные клиенту, который находится на другом конце QTCPSocket.
Поэтому, если вы передаете веб-страницы клиенту браузера, вы сначала слушаете (или используете команды чтения) их запрос, а затем отправляете соответствующий ответ в соответствии с протоколом, который вы используете.
Поэтому я сначала настроил этот сервер на порт 80 на вашем компьютере, а затем открыл браузер для http://localhost
, Затем используйте qDebug для распечатки запросов из вашего браузера.
void Thread::readyRead()
{
qDebug() << Q_FUNC_INFO;
qDebug() << m_socket.readAll();
}
После того, как у вас это получится, решите, как вы собираетесь анализировать запрос, а затем, как вы собираетесь отвечать или какие данные вы хотите обслуживать.
Кроме того, обязательно ознакомьтесь с примерами TCP в См. Также для QTCPSocket.
Надеюсь, это поможет.