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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Обмен QTcpServer  (Прочитано 15431 раз)
BigHom
Гость
« : Январь 26, 2015, 11:40 »

QT3 создаю обмен : клиент - сервер между компьютерами, типа:
Код:
      m_ptcpServer = new QTcpServer(this);
 
      if (!m_ptcpServer->listen(QHostAddress::Any,nPorta))   {
               QMessageBox::critical(0, "server error", "Unable to start the server:"+m_ptcpServer->errorString());
                m_ptcpServer->close();                return;        }

      connect(m_ptcpServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));

код обработки сигнала от клиента "новое соединение" задаю, что обрабатывать readyRead будет программа slotReadClient() - но это не важно - так как это работает , а вопрос по выдачи уже клиенту
Код:
    void slotNewConnection()
{ pClientSocket =m_ptcpServer->nextPendingConnection();
connect(pClientSocket,SIGNAL(disconnected()),   pClientSocket,SLOT(deleteLater()));
connect(pClientSocket,SIGNAL(readyRead()),   this,SLOT(slotReadClient()));
}
   

Всё работает до определённого момента,  например, выдача по 1млн. байт на 2-й выдаче массива в 1млн.байт обмен виснет. То есть программа работает, можно жать кнопки и т.д., кроме обмена по сети . Работаю под МСВС - поэтому приходится перезагружать МСВС , чтобы опять заработало - пока не достигнет выдачи по порту где-то в сумме= 1.2 млн. байт.
Вопрос: почему виснет обмен по порту ? Причём, если с клиента посылать в сумме 1200 000 байт - виснет или с сервера посылать достигнув в сумме= 1 200 000 байт также виснет.
« Последнее редактирование: Январь 26, 2015, 13:41 от BigHom » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #1 : Январь 26, 2015, 12:20 »

виснет где: не приходит slotNewConnection и/или readyRead ?

service netowrk restart - чтобы не перегружать

а зачем qt3, ведь qt4 уже есть в  мсвс ?
Записан
BigHom
Гость
« Ответ #2 : Январь 26, 2015, 12:31 »

Данные больше не идут ни в каком направлении и , конечно, не приходят следующие readyRead
Новые конекты не нужны, так как работаю с одним и тем же клиентом - с которым налажена связь, как раз через 1раз сработанный сигнал новыйконект.
1-й пакет на миллион байт проходит - всё нормально. Вижу как поступают сигналы на очередной кусок readyRead (сделал ловушку) , потом посылаю заново тоже самое и тут часть проходит и где-то зависает...
Повторяю заново, зависает опять на одном и том же куске...(кто-то режет мой миллион на куски и посылает куски в порт...мне без разницы пусть режет, но зачем виснуть?)
QT3 потому, что так получилось... Надо именно QT3
Схема : ноутбук(cервер) -провод- коробка -провод- ноутбук(клиент)

код выдачи:
Код:
 void toclient()
{
QString ss=1млн.байт;
if (ss.size()>0)
{   QTextStream out(pClientSocket);
                out<<ss;}
}
« Последнее редактирование: Январь 26, 2015, 13:12 от BigHom » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #3 : Январь 26, 2015, 13:12 »

и такое поведение только под мсвс (под например клиент\сервер на ubuntu все ок) ?
сниффер показывает приход пакетов когда нет readyRead ?
Записан
Bepec
Гость
« Ответ #4 : Январь 26, 2015, 13:20 »

Я думаю тут проблема в его коде, где нить ошибочка в буфере неочищаемом и капец Улыбающийся
Полный код он не привёл, так что все выводы лишь предположения Улыбающийся
Записан
BigHom
Гость
« Ответ #5 : Январь 26, 2015, 13:25 »

Я думаю тут проблема в его коде, где нить ошибочка в буфере неочищаемом и капец Улыбающийся
Полный код он не привёл, так что все выводы лишь предположения Улыбающийся
Как очищать буфер? Какой буфер? Буфер чего?
Я практически всё привёл. Организуется с помощью QTCPServer- у серевера и QTCPSocet у клиента по порту обмен. По сигналу организуется связь - чтобы далее обмениваться И код текста выдачи приведён.
« Последнее редактирование: Январь 26, 2015, 13:34 от BigHom » Записан
BigHom
Гость
« Ответ #6 : Январь 26, 2015, 13:32 »

и такое поведение только под мсвс (под например клиент\сервер на ubuntu все ок) ?
сниффер показывает приход пакетов когда нет readyRead ?
После того как пропадают readyRead пакеты не приходят. Мои программы вообще перестают работать , даже если выйти и заново запустить. Только перезагрузка МСВС - возобновляет обмен. Сейчас изучаю sudo service networking restart  чтоб не перезагружать
Сниффер - это отдельная программа? как ей пользоваться и где взять?
« Последнее редактирование: Январь 26, 2015, 13:43 от BigHom » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #7 : Январь 26, 2015, 13:45 »

Сниффер - это отдельная программа? как ей пользоваться и где взять?

в составе мсвс должна быть
пример использования:
консоль 1: # tcpdump -n -i eth0 'host 8.8.8.8'
консоль 2: $ ping 8.8.8.8
теперь в консоле 1 видны icmp пакеты
теперь по аналогии со своим приложением

iptables-save что говорит ?
Записан
Bepec
Гость
« Ответ #8 : Январь 26, 2015, 13:53 »

Cмешная ситуация.
Перестают работать только его программы. Следовательно кто то блочит. Кто блочит? скорее всего антивир, брандмауеэр. Блочат при интенсивной передаче. Предел 1,2 мб данных неизвестно откуда присылаемых.


Сниффер покажет отсутствие пакетов. Ибо они будут отбрасываться Улыбающийся

PS qate вы уже в дебри нетворка полезли, а оно нужно? Начинать надо с простого - отключить брандмауэр и антивирус, удалить нафиг программы аля macfree и microsoft antivirus Веселый
« Последнее редактирование: Январь 26, 2015, 14:38 от Bepec » Записан
BigHom
Гость
« Ответ #9 : Январь 26, 2015, 14:22 »

service network restart - чтобы не перегружать
Точна, после выдачи данной команды на ноутбуке, который передавал большой объём информации, при перезапуске моих программ  всё опять работает.  То есть виснет из-за того кто передаёт , в моём примере передаёт сервер. Что-то непонятное считает количество байт переданных моей программой и по достижению какого то числа приблизительно 1200 000 байт дальше подвешивает порт.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #10 : Январь 26, 2015, 14:35 »

PS qate вы уже в дебри нетворка полезли, а оно нужно? Начинать надо с простого - отключить брандмауэр и антивирус, удалить нафиг программы аля macfree и microsoft antivirus Веселый

не венда же - какой антивирус ?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #11 : Январь 26, 2015, 14:36 »

Что-то непонятное считает количество байт переданных моей программой и по достижению какого то числа приблизительно 1200 000 байт дальше подвешивает порт.

нужен минимально рабочий пример сервера и клиента, иначе только гадать и далее
Записан
Bepec
Гость
« Ответ #12 : Январь 26, 2015, 14:43 »

Вы ещё скажите что нет Улыбающийся Есть и антивирусы. Есть просто программы контроля трафика. Да и в правилах наворотить там можно такое, что не дай боже.

Тут стоит выяснить - отрубается вся сеть или отдельное приложение. Если вся - проблема ОС. Если только приложение - проблема в блокировке пакетов.

PS я иду от простого к сложному. QNAM работает без нареканий. Следовательно или код BigHom неправильный, либо настройки ос/стороння программа мешает.
Записан
BigHom
Гость
« Ответ #13 : Январь 26, 2015, 15:40 »

Сниффер - это отдельная программа? как ей пользоваться и где взять?

в составе мсвс должна быть
пример использования:
консоль 1: # tcpdump -n -i eth0 'host 8.8.8.8'
консоль 2: $ ping 8.8.8.8
теперь в консоле 1 видны icmp пакеты
теперь по аналогии со своим приложением

iptables-save что говорит ?

Так не получилось. Но в настройках назвал один комп как server1  - типа сервер, 2-й соответственно client2

пускаю в консолях ping server1  , потом ping client2  - вижу, что на том и другом компьютере связь есть и задержка в мсек.
Далее пускаю свои пакеты от сервера к клиенту , чтобы зависла . И снова проверяю ping
 Вижу, что пинги сами на себя проходят(то есть делаю вывод сеть работает частично на обоих компах) , а вот пинг с сервера (который выдавал) на клиент : пинги вообще не идут - висит.
А пинг на клиенте : ping server1 выдает "from client2  icmp_seg=0 Destination Host Unreachable".

То есть отрубается конкретный порт связи 2-х компьютеров, причём на компьютере который выдаёт большой объём в порт
« Последнее редактирование: Январь 27, 2015, 09:05 от BigHom » Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #14 : Январь 26, 2015, 15:48 »

тогда минимальный пример необходим - без него ни к qt, ни к железу, ни к мсвс обоснованных претензий не предъявить
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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