crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Вопрос по примеру Threaded Fortune Server
Andrewshkovskii
  опции профиля:
сообщение 31.3.2009, 22:18
Сообщение #1


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

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

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




Репутация:   1  


есть там переменная, отвечающая за tcp порт ( socketDescriptor), так вот, каким образом она инициализируется в программе?Т.е. откуда берет значения порта?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 31.3.2009, 22:57
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3290
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Как я понял socketDescriptor это числовое представление описателя соединения. Виндовый HANDLE или если быть точнее SOCKET.

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

p.s. завтра нужно будет глянуть исходники...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 1.4.2009, 1:42
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(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
  опции профиля:
сообщение 1.4.2009, 15:24
Сообщение #4


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

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

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




Репутация:   1  


Да не, вопрос в том, там же откуда-то берется значение явное(допустим, 6138), так вот, откуда возвращается это значение?из какого вызова?я конечно могу и так оставить, но надо разбираться в том, что пишешь...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 1.4.2009, 15:37
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Где там? Ткните(файл, строка) :rolleyes: Я в Threaded Fortune Server что-то такого не нашел.

А так можно получить методом
int QAbstractSocket::socketDescriptor () const
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 1.4.2009, 16:09
Сообщение #6


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

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

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




Репутация:   1  


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

Отсюда : обработку этих запросов осуществлять в функции потока-клиента Run(), или же отдельно?
Прощу подсказать, т.к с клиент-сервер приложениями сталкиваюсь впервые..

Сообщение отредактировал Andrewshkovskii - 1.4.2009, 16:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 1.4.2009, 16:21
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(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:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.9.2019, 20:13