Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование сокетов в QThread
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
iCast
Добрый день! Столкнулся с таким вопросом. В примерах есть клиент-серверное приложение, где на сервере есть унаследованный класс от QThread, который реализует многопоточнь отслаемых данных на клиент.
в файле fortunethread.cpp переопределена функция run()
void FortuneThread::run()
{
    QTcpSocket tcpSocket;
//! [1] //! [2]
    if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket.error());
        return;
    }
//! [2] //! [3]

    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out << (quint16)0;
    out << text;
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
//! [3] //! [4]

    tcpSocket.write(block);
    tcpSocket.disconnectFromHost();
    tcpSocket.waitForDisconnected();
}
//! [4]

Есть такая строка
QTcpSocket tcpSocket;

Это я так понял сокет подключившегося пользователя?
Откуда эта функция узнает какому имеено клиенту передавать?
Просто также переопределил функцию у себя, но ничего серверу не отсылается.
Вообщем помогите разобраться как эта функция передает text клиентам
mezmay
Этому сокету передаются данные о том, с каким клиентом работать, с помощью дескриптора. Делается это в строке:
tcpSocket.setSocketDescriptor(socketDescriptor)

Ну а сам дескриптор скорее всего получается там, где слушаются коннекты.

Происходит это часто в другом потоке, а так как сами сокеты передавать между потоками нельзя, то передается дескриптор и в новом потоке присваивается сокету
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2018 IPS, Inc.