crossplatform.ru

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


  Ответ в Вопрос по примеру Threaded Fortune Server
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 1.4.2009, 16:21
 
Цитата(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:
Andrewshkovskii Дата 1.4.2009, 16:09
  Проще : я не вижу , где int-переменной socketDescriptor присваивается какое-либо целочисленное значение.
Вопрос 2 :
Мне необходимо на сервера(аналог threaded fortune server) обрабатывать запросы клиента :
1. Запрос на соединение, т.е информируем сервер о том, что клиент законнектился и ему надо скинуть данные.
2. Запрос на повторную передачу данных , т.е. при запросе 1 передали , допустим, 10 строчек QString из QStringList, клиент их обработал, и необходимо передать другие 10 строчек.
3. Запрос на передачу данных от клиент, т.е. клиент передает обработанные данные на сервер, сервер уже их сохраняет, допустим, в файл.

Отсюда : обработку этих запросов осуществлять в функции потока-клиента Run(), или же отдельно?
Прощу подсказать, т.к с клиент-сервер приложениями сталкиваюсь впервые..
igor_bogomolov Дата 1.4.2009, 15:37
  Где там? Ткните(файл, строка) :rolleyes: Я в Threaded Fortune Server что-то такого не нашел.

А так можно получить методом
int QAbstractSocket::socketDescriptor () const
Andrewshkovskii Дата 1.4.2009, 15:24
  Да не, вопрос в том, там же откуда-то берется значение явное(допустим, 6138), так вот, откуда возвращается это значение?из какого вызова?я конечно могу и так оставить, но надо разбираться в том, что пишешь...
igor_bogomolov Дата 1.4.2009, 1:42
 
Цитата(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;
    }
    .....// все данные переданные по соккету попадут только к тому клиенту, который запросил соединение.
}
ViGOur Дата 31.3.2009, 22:57
  Как я понял socketDescriptor это числовое представление описателя соединения. Виндовый HANDLE или если быть точнее SOCKET.

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

p.s. завтра нужно будет глянуть исходники...
Andrewshkovskii Дата 31.3.2009, 22:18
  есть там переменная, отвечающая за tcp порт ( socketDescriptor), так вот, каким образом она инициализируется в программе?Т.е. откуда берет значения порта?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 7.7.2020, 5:10