Russian Qt Forum
Март 28, 2024, 23:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QTcpSocket заезжанная тема !!!!!!!!!!
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTcpSocket заезжанная тема !!!!!!!!!! (Прочитано 18683 раз)
Денис
Гость
QTcpSocket заезжанная тема !!!!!!!!!!
«
:
Май 30, 2015, 13:00 »
В общем тема говорит сама за себя. Имеется клиент серверное приложение в котором клиенты обрабатываются в отдельном потоке. Тестировал приложение на
Windows
и оно работало !!!!!!!
Перенес на
Ubuntu
и покатило ...
) не буду все проблемы перечислять, с ними разобрался осталась непонятка с принятием данных !
QTcpSocket
упорно не хочет принимать данные в потоке от клиента, не приходит сигнал
readyRead()
:
QTcpServer:
Код:
/*
* New client connection
*/
void SenseSystem::TechServer::newclient()
{
// If server started
qDebug() << QString::fromUtf8("New connection!!!");
qintptr IDSocket = tcpServer->nextPendingConnection()->socketDescriptor();
QThread *thread = new QThread();
Client *client = new Client(IDSocket);
client->moveToThread(thread);
// Соединяем сигнал started потока, со слотом process "рабочего" класса, т.е. начинается выполнение нужной работы.
connect(thread,SIGNAL(started()),client,SLOT(process()));
connect(thread,SIGNAL(finished()),thread,SLOT(deleteLater()));
// По завершению выходим из потока, и удаляем рабочий класс
connect(client,SIGNAL(finished()),thread,SLOT(quit()));
connect(client,SIGNAL(finished()),client,SLOT(deleteLater()));
// Удаляем поток, после выполнения операции
if(config.typeView == CONSOLE)
{
connect(client,SIGNAL(println(QString)),(Console *)config.display,SLOT(outStream(QString)));
connect(client,SIGNAL(addClientToList(int)),(Console *)config.display,SLOT(addClientToList(int)));
}
else if(config.typeView == WINDOW)
{
connect(client,SIGNAL(println(QString)),((MainWindow *)config.display),SLOT(outStream(QString)));
connect(client,SIGNAL(addClientToList(int)),(MainWindow *)config.display,SLOT(addClientToList(int)));
}
connect(client,SIGNAL(removeClientFromList(int)),this,SLOT(removeMap(int)));
SenseSystem::TechServer::client.insert(IDSocket,client);
thread->start();
}
QTcpSocket:
Код:
/*
* Run the thread
*/
void SenseSystem::Client::process(void)
{
clientSocket = new QTcpSocket();
// Trying to connect to socket descriptor
if (!clientSocket->setSocketDescriptor(socketDescriptor))
{
// Can't connect to socket descriptor
finished();
}
else
{
sql = new MainSQL("localhost","postirayka",
"root","root");
// Initiolization settings for system
timer = new QTimer(this);
// setup signal and slot
connect(timer,SIGNAL(timeout()),this,SLOT(readCommand()));
// Reading command from MySQL
timer->start(2000);
// Initiolization settings for system
autoriz = new QTimer(this);
// setup signal and slot
connect(autoriz,SIGNAL(timeout()),this,SLOT(finishThread()));
// Reading command from MySQL
autoriz->start(20000);
// Initiolization settings for system
timAlive = new QTimer(this);
// setup signal and slot
connect(timAlive,SIGNAL(timeout()),this,SLOT(finishThread()));
// Reading command from MySQL
timAlive->start(600000);
timModem = new QTimer(this);
// setup signal and slot
connect(timModem,SIGNAL(timeout()),this,SLOT(readModem()));
// Reading command from MySQL
timModem->start(50000);
timBufClear = new QTimer(this);
// setup signal and slot
connect(timBufClear,SIGNAL(timeout()),this,SLOT(bufferClear()));
// Starting the thread of socket to execute events
connect(clientSocket,SIGNAL(readyRead()),this, SLOT(socketReadClient()));
connect(clientSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)),this, SLOT(clientChangeState()));
connect(clientSocket,SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(socketErrorClient()));
connect(clientSocket,SIGNAL(disconnected()),this, SLOT(socketRemoveClient()));
// String to window
QString strSocket;
strSocket += QString("[") + QString::number(socketDescriptor) + "] New connection!!!" + "\r\n\r\n";
// Set text to the text browser
println(strSocket);
}
}
Самое интересное что ее GUI вариант под Ubuntu принимает пакеты, а консольный не хочет принимать, хотя под Windows работают оба варианта
Вычитал на форумах что эта проблема не у меня только, но четкого понятного решения не обнаружи посуму обращаюсь к своему любимому форуму )
«
Последнее редактирование: Май 30, 2015, 13:07 от Денис
»
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #1 :
Май 30, 2015, 14:04 »
Кажись потихоньку стал понимать проблемы вроде бы была в том что App -> X11 отсылал данные X Serer-у а он у меня на компе был выключен вот и не приходили пакеты ... щас буду бороться с этим
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #2 :
Май 30, 2015, 16:51 »
Отключил рабочий стол но проблема осталась, объект не получает сообщения readyRead()
Есть догадки ?
Записан
Bepec
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #3 :
Май 30, 2015, 17:54 »
хз, меня лично напрягает и название темы и содержимое
Тема заезжена, у многих проблема та же. Хотя у всех всё нормально работает
А вы сначала поймите что не работает - ваш поток, tcp сокет или же ваш код (грешу на код).
Вы не привели всего кода, за кадром остались самые важные части
PS вы хоть в курсе, у вас сокеты создаются нормально или нет?
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #4 :
Май 30, 2015, 18:26 »
Цитата: Bepec от Май 30, 2015, 17:54
хз, меня лично напрягает и название темы и содержимое
Тема заезжена, у многих проблема та же. Хотя у всех всё нормально работает
А вы сначала поймите что не работает - ваш поток, tcp сокет или же ваш код (грешу на код).
Вы не привели всего кода, за кадром остались самые важные части
PS вы хоть в курсе, у вас сокеты создаются нормально или нет?
Я же в первом посте написал, что приложение рабочее и под Виндой открывает потоки и работает нормально ! В Ubuntu тоже нормально но когда с графической частью, в консольном варианте не работает ...
Какой вам еще код привести там очень много ветки не хватит, я привел куски открытия потока и создания сокета ...
Вот пример консольной вставки:
Код:
/*
* Constructor console task
*/
Console::Console(QStringList agruments,QObject *parent) :
QObject(parent)
{
Console::agruments = agruments;
// Function of fetch of user interface
server = new SenseSystem::TechServer(config.port);
connect(this,SIGNAL(println(QString)),this,SLOT(outStream(QString)));
// Checking if server is started ?
if(server != NULL)
{
// Set text to the text browser
println("Server is working!\r\n");
println("UTC: "+QDateTime::currentDateTimeUtc().toString()+"\r\n");
}
// If server isn't working
else
{
// Set text to the text browser
println("Server isn\'t working!!!\r\n");
println("Please check the internet connection\r\n");
}
}
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #5 :
Май 30, 2015, 19:23 »
В качестве переключателя использую следующую конструкцию:
Код:
// Checking if we need console application
if(config.typeView == SenseSystem::CONSOLE)
{
QCoreApplication app(argc, argv);
config.display = new Console(app.arguments());
// Return end of application
return app.exec();
}
// Checking if we need window application
else
{
QApplication app(argc, argv);
config.display = new MainWindow();
((MainWindow *) config.display)->show();
// Return end of application
return app.exec();
}
Возможно проблема в QCoreApplication, ведь когда запускаю в графической режиме то readyRead() приходит, а при заданнии параметров для консольного старта - не приходит
? Есть мысди по сему вопросу ?
Записан
Bepec
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #6 :
Май 30, 2015, 19:38 »
Вы б ещё код окна привели.
Как бы вы спрашиваете - почему не приходит сигнал. А я и задаю вам вопрос - а вы уверены что у вас поток работает, что сокет нормально создаётся, что ваш сервер отвечает на запрос?
Я задаю вопрос про работу всего этого под линуксом. Может вы где в переменной создания сокета ошиблись, и он у вас выдаёт ошибку? Может у вас поток намертво блочится под линусом, из-за какого то вашего кода?
И вы на эти вопросы ещё сами себе не ответили, раз так вопрос поставлен
PS делаете минимально рабочий пример и проверяете - работает или нет. Если работает - стучите себе по голову и ищете ошибку в коде. Если не работает - выкладываете на форум весь проект в архиве с cpp h qrc pro pri файлами в архиве.
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #7 :
Май 30, 2015, 19:48 »
Цитата: Bepec от Май 30, 2015, 19:38
Вы б ещё код окна привели.
Как бы вы спрашиваете - почему не приходит сигнал. А я и задаю вам вопрос - а вы уверены что у вас поток работает, что сокет нормально создаётся, что ваш сервер отвечает на запрос?
Я задаю вопрос про работу всего этого под линуксом. Может вы где в переменной создания сокета ошиблись, и он у вас выдаёт ошибку? Может у вас поток намертво блочится под линусом, из-за какого то вашего кода?
И вы на эти вопросы ещё сами себе не ответили, раз так вопрос поставлен
PS делаете минимально рабочий пример и проверяете - работает или нет. Если работает - стучите себе по голову и ищете ошибку в коде. Если не работает - выкладываете на форум весь проект в архиве с cpp h qrc pro pri файлами в архиве.
Я же уже привел все необходимые куски с
connect(...)
??
И смысл стого что я вышлю проект у вас нету специализированного железа для работы с ним, там сервер с собственным протоколом
?? Сильно вам поможет то что я вышлю проект, а вы скажите проект не рабочий стучите по голове ... зачем ?!
Выслать то я могу но нужен ваш IP для подключения железа для работы к вашей машине
?
Вот тут у чувака подобная ситуация, но он в графике запустил ... у меня в графике тоже работает ... ему там не помогли:
https://www.linux.org.ru/forum/development/7751902
Записан
Bepec
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #8 :
Май 30, 2015, 20:04 »
*зануда мод он*
1) не надо мне ваш проект целиком, я просил лишь минимально компиляберный пример ОШИБКИ. Т.е. минимально компиляберный пример проекта, который принимает соединение (ЛЮБОЕ, ведь у вас это не работает, так?) и при этом выдаёт ошибку/не работает.
2) проверьте, посылает ли сервер пакет.
3) проверьте, работают ли сигналы в консольной версии.
4) напишите наконец версию ubuntu, в которой у вас проблема.
5) после всего этого соберитесь, возьмите себя в руки и по пунктам напишите ответ.
*зануда мод офф*
Вы показываете код, он не содержит ошибок на взгляд. Но система сигнал слотов зависима от того, что происходит у вас внутри, там, в программе. А не в методе, где просто происходит connect.
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #9 :
Май 30, 2015, 20:12 »
Цитата: Bepec от Май 30, 2015, 20:04
*зануда мод он*
1) не надо мне ваш проект целиком, я просил лишь минимально компиляберный пример ОШИБКИ. Т.е. минимально компиляберный пример проекта, который принимает соединение (ЛЮБОЕ, ведь у вас это не работает, так?) и при этом выдаёт ошибку/не работает.
2) проверьте, посылает ли сервер пакет.
3) проверьте, работают ли сигналы в консольной версии.
4) напишите наконец версию ubuntu, в которой у вас проблема.
5) после всего этого соберитесь, возьмите себя в руки и по пунктам напишите ответ.
*зануда мод офф*
Вы показываете код, он не содержит ошибок на взгляд. Но система сигнал слотов зависима от того, что происходит у вас внутри, там, в программе. А не в методе, где просто происходит connect.
*зануда мод он*
*зануда мод офф*
Оценил, смешно )
Ошибку не выдает, просто не принимает данные, но поработав раздупляется и начинает принимать, а потом опять ... Щас скину минимально рабочий ))
Записан
Nidxogg
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #10 :
Май 30, 2015, 20:27 »
Может данные не доходят?
Недавно столкнулись с проблемой потери пакетов в маршрутизаторе
Записан
Bepec
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #11 :
Май 30, 2015, 21:08 »
До человека не доходит что лишь по шагово отсекая проблему, можно её локализовать, а потом и решить.
И ему пытаются помочь, а он смеется (не осуждаю), но и не отвечает на прямо заданные вопросы.
А так как раздупляется, скорее всего напакостничали в коде. Или очередь забивают, или ещё что
to Nidxogg: раз на винде всё работает, следовательно с сетью всё в порядке. Проблема в программе. Точнее в коде. И тут коронная фраза: "95% ошибки в вашем коде, 2% ошибок в ОС, 2% железные проблемы, 1% вина разработчиков Qt"
Записан
iptOt
Гость
GSM VoIP Gateways
«
Ответ #12 :
Май 31, 2015, 03:46 »
Четырехканальный GSM VoIP шлюз <a href=http://ecrimea.net/voip/gsm-voip-shlyuz-goip-4.html>GoIP 4</a> от компании HyberTone Technology Co., Ltd является новой моделью <a href=http://ecrimea.net/voip/gsm-voip-shlyuz-goip-4.html>VoIP GSM</a> шлюза на базе популярных и недорогих моделей GSM шлюзов GoIP. VoIP GSM gateway GoIP4 совершает звонки между GSM и IP сетями без выхода в телефонную сеть общественного пользования ТфОП, благодаря чему снижаются затраты на телефонную связь в т.ч. и на роуминг. Каждый из четырех GSM каналов VoIP GSM шлюза может работать независимо или в рамках единого логического канала (группы GSM каналов).
<a href=http://tritel.net.ru>Интернет в Симферополе</a>
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #13 :
Май 31, 2015, 11:03 »
Цитата: Bepec от Май 30, 2015, 21:08
До человека не доходит что лишь по шагово отсекая проблему, можно её локализовать, а потом и решить.
И ему пытаются помочь, а он смеется (не осуждаю), но и не отвечает на прямо заданные вопросы.
А так как раздупляется, скорее всего напакостничали в коде. Или очередь забивают, или ещё что
to Nidxogg: раз на винде всё работает, следовательно с сетью всё в порядке. Проблема в программе. Точнее в коде. И тут коронная фраза: "95% ошибки в вашем коде, 2% ошибок в ОС, 2% железные проблемы, 1% вина разработчиков Qt"
Во-первых не смеюсь, а меня это улыбает ) Это разные вещи !
А дальше по пунктам:
1) не надо мне ваш проект целиком, я просил лишь минимально компиляберный пример ОШИБКИ. Т.е. минимально компиляберный пример проекта, который принимает соединение (ЛЮБОЕ, ведь у вас это не работает, так?) и при этом выдаёт ошибку/не работает:
Еще раз ошибку не выдает !!!!! А просто не получает данные, а постояв, потупив начинает получать данные ... нестабильно, в одной сессии получает, в другой нет, это как-то связано с потоками в консоли и классом QCoreApplication, ведь в графическом виде я создаю приложение QApplication и при запуске его под той же версией Ubuntu все работает, не работает только консольная версия и только на Ubuntu, в Windows работает. Получать начинает как мне кажется когда запускаю Putty в режиме X11-перенаправление. Щас зроблю мин-компилябити !
2) проверьте, посылает ли сервер пакет:
Еще раз не сервер посылает пакет, а клиент и это сервер не принимает данные в консоли на Ubuntu.
Клиент -
специализироанное железо !
3) проверьте, работают ли сигналы в консольной версии:
Сигналы работаю так как в классе Server:
Код:
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newclient()));
И соединение все время открывается но не принимает байты, причем вообще не принимает, я уже опрос буфера по таймеру сделал, но там все равно пусто:
Код:
/*
* Recive of the request to the server
*/
void SenseSystem::Client::socketReadClient(void)
{
if(clientSocket->bytesAvailable() == 0)
return;
qDebug() << "Recieved some data";
.......................................................................
}
И ничего не принято (
4) напишите наконец версию Ubuntu, в которой у вас проблема:
Ubuntu 12.04.5 LTS
5) после всего этого соберитесь, возьмите себя в руки и по пунктам напишите ответ:
Собрася, взял в руки.
Записан
Денис
Гость
Re: QTcpSocket заезжанная тема !!!!!!!!!!
«
Ответ #14 :
Май 31, 2015, 11:50 »
Вот мин-компилябиляти, посмотрим что скажут проффесионалы ):
http://files.d-lan.dp.ua/download.php?file=0828716e7734c1c039c62fc1ce3a839f
«
Последнее редактирование: Май 31, 2015, 11:56 от Денис
»
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...