crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Использование сокетов в QThread
iCast
  опции профиля:
сообщение 24.1.2014, 10:07
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 22.9.2012
Пользователь №: 3527

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день! Столкнулся с таким вопросом. В примерах есть клиент-серверное приложение, где на сервере есть унаследованный класс от 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
  опции профиля:
сообщение 24.1.2014, 12:41
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Этому сокету передаются данные о том, с каким клиентом работать, с помощью дескриптора. Делается это в строке:
tcpSocket.setSocketDescriptor(socketDescriptor)

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

Происходит это часто в другом потоке, а так как сами сокеты передавать между потоками нельзя, то передается дескриптор и в новом потоке присваивается сокету

Сообщение отредактировал mezmay - 24.1.2014, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 16:16