Russian Qt Forum
Ноябрь 23, 2024, 04:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: QTcpSocket заезжанная тема !!!!!!!!!!  (Прочитано 20070 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Май 31, 2015, 12:29 »

Странно.

Я просто рас комментировал строку в SenseSystem::Client::process():
Код
C++ (Qt)
   connect(clientSocket,SIGNAL(readyRead()),this, SLOT(socketReadClient()));
 
и слот socketReadClient при получении данных нормально вызывается.

Archlinux.
Записан
Денис
Гость
« Ответ #16 : Май 31, 2015, 13:25 »

Странно.

Я просто рас комментировал строку в SenseSystem::Client::process():
Код
C++ (Qt)
   connect(clientSocket,SIGNAL(readyRead()),this, SLOT(socketReadClient()));
 
и слот socketReadClient при получении данных нормально вызывается.

Archlinux.

О извеняюсь, она и должна была быть раскоментирована, это я просто когда экспериментировал с таймером чтения .. но это все равно не решает проблему, я же писал в графике работает а в консоли не работает НепонимающийНепонимающий*?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Май 31, 2015, 13:31 »

но это все равно не решает проблему, я же писал в графике работает а в консоли не работает НепонимающийНепонимающий*?
Я при запуске указываю в командной строек --view=console, все равно работает.
Записан
Денис
Гость
« Ответ #18 : Май 31, 2015, 13:33 »

но это все равно не решает проблему, я же писал в графике работает а в консоли не работает НепонимающийНепонимающий*?
Я при запуске указываю в командной строек --view=console, все равно работает.

Под Ubuntu ? Можно тогда версию ?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #19 : Май 31, 2015, 13:36 »

Под Ubuntu ? Можно тогда версию ?
Под арчем.
Я это к тому, что скорее всего Qt здесь не причем, а виновата убунта.
Записан
Денис
Гость
« Ответ #20 : Май 31, 2015, 13:40 »

Под Ubuntu ? Можно тогда версию ?
Под арчем.
Я это к тому, что скорее всего Qt здесь не причем, а виновата убунта.

Та я понимаю, но как тогда починить ? Иногда прием сообщений приходит а потом нету ? От сессии к сесии ... И в графике на Ubuntu тоже работает !!!!!
Записан
Денис
Гость
« Ответ #21 : Май 31, 2015, 14:49 »

Под Ubuntu ? Можно тогда версию ?
Под арчем.
Я это к тому, что скорее всего Qt здесь не причем, а виновата убунта.

А может класс QCoreApplication блокировать поток ? Может можно его как-то конфигурировать ?
Записан
Денис
Гость
« Ответ #22 : Май 31, 2015, 16:06 »

Залил на git если кто боится надо:
https://github.com/redradist/Testing_Server.git
Записан
Денис
Гость
« Ответ #23 : Май 31, 2015, 17:06 »

Сделал такую добавку и повалило ... Сообщение отлавиваются но ругается что нельзя передать сокет с родителем ...
Получается было да сокета с разными указателями, но одинаковыми дискрипторами и и все пакеты поступали в основной поток где был первоначальный сокет ... При передачи его во вторичный поток прием данных осуществляется.
Код:
/*
 * New client connection
 */
void SenseSystem::TechServer::newclient()
{
    // If server started
    qDebug() << QString::fromUtf8("New connection!!!");

    QTcpSocket *socket = tcpServer->nextPendingConnection();
    qintptr IDSocket = socket->socketDescriptor();

    QThread *thread = new QThread(this);
    Client *client = new Client(socket);
    socket->moveToThread(thread);
    client->moveToThread(thread);

Но как его создать во вторичном потоке и при этом отключить отлавливание событий в главном, или коректно переместить Непонимающий??
Записан
Bepec
Гость
« Ответ #24 : Май 31, 2015, 17:07 »

На более высокой версии убунту всё работает как часы. (точнее валится с сегфолтом после 6 подключений подряд, но эт уже косяк кода Веселый).

Как вариант сделать Client членом класса, отнаследованного от QThread и не париться. Хотя ситуация непонятная, что вы там натворили Веселый

PS и да, лучше плюньте на ваши закоряки с потоками, сделайте нормально - сервер посылает/отправляет данные, а потоки лишь передают что отправить.

PPS в одном из первых сообщений я и задавал вопрос по поводу успешности создания сокета Веселый
« Последнее редактирование: Май 31, 2015, 17:22 от Bepec » Записан
Денис
Гость
« Ответ #25 : Май 31, 2015, 17:23 »

На более высокой версии убунту всё работает как часы. (точнее валится с сегфолтом после 6 подключений подряд, но эт уже косяк кода Веселый).

Как вариант сделать Client членом класса, отнаследованного от QThread и не париться. Хотя ситуация непонятная, что вы там натворили Веселый

PS и да, лучше плюньте на ваши закоряки с потоками, сделайте нормально - сервер посылает/отправляет данные, а потоки лишь передают что отправить.

Что непонятного что наворотил, раньше передавал дискриптор классу Client, а теперь указатель на сокета.
Тока как переместить сокет по человечески ?
Записан
Bepec
Гость
« Ответ #26 : Май 31, 2015, 17:49 »

Ну я б посоветовал поменять архитектуру Улыбающийся
аля Client->Writer/Reader->Socket.
Синхронизацией даже заниматься не нужно, всё разрулит сигнал слотовая система (чем и любима) Веселый
Записан
Денис
Гость
« Ответ #27 : Май 31, 2015, 17:51 »

Ну я б посоветовал поменять архитектуру Улыбающийся
аля Client->Writer/Reader->Socket.
Синхронизацией даже заниматься не нужно, всё разрулит сигнал слотовая система (чем и любима) Веселый

Я об этом думал, но если бы сокет был в потоке приложение же теоретически быстрее работало бы ?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #28 : Май 31, 2015, 18:31 »

Посмотрите на метод:
void QTcpServer::incomingConnection(qintptr socketDescriptor)

и сделайте свою реализацию вместо метода newclient.
Записан
Bepec
Гость
« Ответ #29 : Май 31, 2015, 20:00 »

Ну если честно, не вижу особой прибавки к быстродействию. Переключение потоков при большом количестве клиентов съест всю разницу Улыбающийся

Хотя, как говорится это две стороны одной медали. И так и так можно, просто я ниразу не реализовывал принцип поток на клиент, ибо считаю избыточным.

Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.