Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по примеру Threaded Fortune Server
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие
Andrewshkovskii
есть там переменная, отвечающая за tcp порт ( socketDescriptor), так вот, каким образом она инициализируется в программе?Т.е. откуда берет значения порта?
ViGOur
Как я понял socketDescriptor это числовое представление описателя соединения. Виндовый HANDLE или если быть точнее SOCKET.

Если я не правильно понял, поправьте меня. :)

p.s. завтра нужно будет глянуть исходники...
igor_bogomolov
Цитата(Andrewshkovskii @ 31.3.2009, 23:18) *
каким образом она инициализируется в программе?Т.е. откуда берет значения порта?

Берется она здесь (файл - fortuneserver.cpp):
void FortuneServer::incomingConnection(int socketDescriptor)
{
    .......
}

Т.е. когда возникает новое соединение, socketDescriptor передается как параметр.
Дальше, этот дескриптор устанавливается соккету (файл - fortunethread.cpp)
ivoid FortuneThread::run()
{
    QTcpSocket tcpSocket;
    if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocket.error());
        return;
    }
    .....// все данные переданные по соккету попадут только к тому клиенту, который запросил соединение.
}
Andrewshkovskii
Да не, вопрос в том, там же откуда-то берется значение явное(допустим, 6138), так вот, откуда возвращается это значение?из какого вызова?я конечно могу и так оставить, но надо разбираться в том, что пишешь...
igor_bogomolov
Где там? Ткните(файл, строка) :rolleyes: Я в Threaded Fortune Server что-то такого не нашел.

А так можно получить методом
int QAbstractSocket::socketDescriptor () const
Andrewshkovskii
Проще : я не вижу , где int-переменной socketDescriptor присваивается какое-либо целочисленное значение.
Вопрос 2 :
Мне необходимо на сервера(аналог threaded fortune server) обрабатывать запросы клиента :
1. Запрос на соединение, т.е информируем сервер о том, что клиент законнектился и ему надо скинуть данные.
2. Запрос на повторную передачу данных , т.е. при запросе 1 передали , допустим, 10 строчек QString из QStringList, клиент их обработал, и необходимо передать другие 10 строчек.
3. Запрос на передачу данных от клиент, т.е. клиент передает обработанные данные на сервер, сервер уже их сохраняет, допустим, в файл.

Отсюда : обработку этих запросов осуществлять в функции потока-клиента Run(), или же отдельно?
Прощу подсказать, т.к с клиент-сервер приложениями сталкиваюсь впервые..
igor_bogomolov
Цитата(Andrewshkovskii @ 1.4.2009, 17:09) *
я не вижу , где int-переменной socketDescriptor присваивается какое-либо целочисленное значение.

Здесь получили socketDescriptor как параметр и передали в конструктор класса FortuneThread
 void FortuneServer::incomingConnection(int socketDescriptor)
{
      QString fortune = fortunes.at(qrand() % fortunes.size());
       FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this);
     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
      thread->start();
}

Далле присвоение происходит здесь
 FortuneThread::FortuneThread(int socketDescriptor, const QString &fortune, QObject *parent)
     : QThread(parent), [b]socketDescriptor(socketDescriptor)[/b], text(fortune)
{
}


Вот и все :rolleyes:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.