Название: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 11:40 QT3 создаю обмен : клиент - сервер между компьютерами, типа:
Код: m_ptcpServer = new QTcpServer(this); код обработки сигнала от клиента "новое соединение" задаю, что обрабатывать readyRead будет программа slotReadClient() - но это не важно - так как это работает , а вопрос по выдачи уже клиенту Код: void slotNewConnection() Всё работает до определённого момента, например, выдача по 1млн. байт на 2-й выдаче массива в 1млн.байт обмен виснет. То есть программа работает, можно жать кнопки и т.д., кроме обмена по сети . Работаю под МСВС - поэтому приходится перезагружать МСВС , чтобы опять заработало - пока не достигнет выдачи по порту где-то в сумме= 1.2 млн. байт. Вопрос: почему виснет обмен по порту ? Причём, если с клиента посылать в сумме 1200 000 байт - виснет или с сервера посылать достигнув в сумме= 1 200 000 байт также виснет. Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 12:20 виснет где: не приходит slotNewConnection и/или readyRead ?
service netowrk restart - чтобы не перегружать а зачем qt3, ведь qt4 уже есть в мсвс ? Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 12:31 Данные больше не идут ни в каком направлении и , конечно, не приходят следующие readyRead
Новые конекты не нужны, так как работаю с одним и тем же клиентом - с которым налажена связь, как раз через 1раз сработанный сигнал новыйконект. 1-й пакет на миллион байт проходит - всё нормально. Вижу как поступают сигналы на очередной кусок readyRead (сделал ловушку) , потом посылаю заново тоже самое и тут часть проходит и где-то зависает... Повторяю заново, зависает опять на одном и том же куске...(кто-то режет мой миллион на куски и посылает куски в порт...мне без разницы пусть режет, но зачем виснуть?) QT3 потому, что так получилось... Надо именно QT3 Схема : ноутбук(cервер) -провод- коробка -провод- ноутбук(клиент) код выдачи: Код: void toclient() Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 13:12 и такое поведение только под мсвс (под например клиент\сервер на ubuntu все ок) ?
сниффер показывает приход пакетов когда нет readyRead ? Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 26, 2015, 13:20 Я думаю тут проблема в его коде, где нить ошибочка в буфере неочищаемом и капец :)
Полный код он не привёл, так что все выводы лишь предположения :) Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 13:25 Я думаю тут проблема в его коде, где нить ошибочка в буфере неочищаемом и капец :) Как очищать буфер? Какой буфер? Буфер чего?Полный код он не привёл, так что все выводы лишь предположения :) Я практически всё привёл. Организуется с помощью QTCPServer- у серевера и QTCPSocet у клиента по порту обмен. По сигналу организуется связь - чтобы далее обмениваться И код текста выдачи приведён. Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 13:32 и такое поведение только под мсвс (под например клиент\сервер на ubuntu все ок) ? После того как пропадают readyRead пакеты не приходят. Мои программы вообще перестают работать , даже если выйти и заново запустить. Только перезагрузка МСВС - возобновляет обмен. Сейчас изучаю sudo service networking restart чтоб не перезагружатьсниффер показывает приход пакетов когда нет readyRead ? Сниффер - это отдельная программа? как ей пользоваться и где взять? Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 13:45 Сниффер - это отдельная программа? как ей пользоваться и где взять? в составе мсвс должна быть пример использования: консоль 1: # tcpdump -n -i eth0 'host 8.8.8.8' консоль 2: $ ping 8.8.8.8 теперь в консоле 1 видны icmp пакеты теперь по аналогии со своим приложением iptables-save что говорит ? Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 26, 2015, 13:53 Cмешная ситуация.
Перестают работать только его программы. Следовательно кто то блочит. Кто блочит? скорее всего антивир, брандмауеэр. Блочат при интенсивной передаче. Предел 1,2 мб данных неизвестно откуда присылаемых. Сниффер покажет отсутствие пакетов. Ибо они будут отбрасываться :) PS qate вы уже в дебри нетворка полезли, а оно нужно? Начинать надо с простого - отключить брандмауэр и антивирус, удалить нафиг программы аля macfree и microsoft antivirus :D Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 14:22 service network restart - чтобы не перегружать Точна, после выдачи данной команды на ноутбуке, который передавал большой объём информации, при перезапуске моих программ всё опять работает. То есть виснет из-за того кто передаёт , в моём примере передаёт сервер. Что-то непонятное считает количество байт переданных моей программой и по достижению какого то числа приблизительно 1200 000 байт дальше подвешивает порт.Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 14:35 PS qate вы уже в дебри нетворка полезли, а оно нужно? Начинать надо с простого - отключить брандмауэр и антивирус, удалить нафиг программы аля macfree и microsoft antivirus :D не венда же - какой антивирус ? Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 14:36 Что-то непонятное считает количество байт переданных моей программой и по достижению какого то числа приблизительно 1200 000 байт дальше подвешивает порт. нужен минимально рабочий пример сервера и клиента, иначе только гадать и далее Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 26, 2015, 14:43 Вы ещё скажите что нет :) Есть и антивирусы. Есть просто программы контроля трафика. Да и в правилах наворотить там можно такое, что не дай боже.
Тут стоит выяснить - отрубается вся сеть или отдельное приложение. Если вся - проблема ОС. Если только приложение - проблема в блокировке пакетов. PS я иду от простого к сложному. QNAM работает без нареканий. Следовательно или код BigHom неправильный, либо настройки ос/стороння программа мешает. Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 26, 2015, 15:40 Сниффер - это отдельная программа? как ей пользоваться и где взять? в составе мсвс должна быть пример использования: консоль 1: # tcpdump -n -i eth0 'host 8.8.8.8' консоль 2: $ ping 8.8.8.8 теперь в консоле 1 видны icmp пакеты теперь по аналогии со своим приложением iptables-save что говорит ? пускаю в консолях ping server1 , потом ping client2 - вижу, что на том и другом компьютере связь есть и задержка в мсек. Далее пускаю свои пакеты от сервера к клиенту , чтобы зависла . И снова проверяю ping Вижу, что пинги сами на себя проходят(то есть делаю вывод сеть работает частично на обоих компах) , а вот пинг с сервера (который выдавал) на клиент : пинги вообще не идут - висит. А пинг на клиенте : ping server1 выдает "from client2 icmp_seg=0 Destination Host Unreachable". То есть отрубается конкретный порт связи 2-х компьютеров, причём на компьютере который выдаёт большой объём в порт Название: Re: Обмен QTcpServer Отправлено: qate от Январь 26, 2015, 15:48 тогда минимальный пример необходим - без него ни к qt, ни к железу, ни к мсвс обоснованных претензий не предъявить
Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 27, 2015, 12:08 Запускаю свою программу сервера. Начинаю выдавать информацию. Клиент всё принимает. Добиваюсь чтоб зависла и выдача прекратилась.
Далее не выключая своей программы , даю с консоли команду на сервере , выдававшем информацию: Код: service network restart Название: Re: Обмен QTcpServer Отправлено: qate от Январь 27, 2015, 12:31 без минимального рабочего примера тебе никто не сможет помочь - ни тут, ни в техподдержке мсвс
Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 27, 2015, 12:32 Это называется толочь воду в ступе.
На вопросы отвечаете не точно, расплывчато. Вместо рекомендаций делаете свои умозаключения, не дающие никакой информации. Игнорируете просьбу выложить код. Это что угодно, а не заинтересованность в решении вопроса :D Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 27, 2015, 13:13 main.cpp
Код: #include <QtGui/QApplication> Код: #ifndef MYSERVER_H Код: #include "myserver.h" В файле b.xml нужно предварительно записать редактором 1млн. байтов Название: Re: Обмен QTcpServer Отправлено: qate от Январь 27, 2015, 14:41 это не qt3, код не собирается
выкладывай весь проект архивом чтобы только qmake && make подать Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 27, 2015, 14:54 Да, немного ошибся, сервер написан QT4.5.3 - а который принимает на QT3 . Сорри, немного перепутал. Я убрал из своей программы всё лишнее, оставил только то, что касается обмена.
Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 27, 2015, 16:17 Мне всегда нравятся такие люди. Давайте я вам дам неработающий проект, правда перед этим покромсаю там весь код, который я(да да, экспертная оценка) считаю ненужным.
Делайте тогда уж минимальный проект, выдающий ошибку. Демонстрирующий проблему. А не куцый кусок копыта от коня, которого надо лечить. Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 28, 2015, 13:05 это не qt3, код не собирается У меня всё собралось, чуть чуть подправил вот что получилось:выкладывай весь проект архивом чтобы только qmake && make подать main.cpp Код: #include <QtGui/QApplication> ServOtl.h Код: #ifndef ServOtl_H ServOtl.cpp Код: #include "ServOtl.h" ServOtl.pro Код: TEMPLATE = app Название: Re: Обмен QTcpServer Отправлено: qate от Январь 28, 2015, 13:36 в qt3 все хеадеры с маленькой буквы, тут qt4
Название: Re: Обмен QTcpServer Отправлено: qate от Январь 28, 2015, 14:01 ок, пусть есть сервер, ну а клиент то где ?
Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 30, 2015, 11:15 ок, пусть есть сервер, ну а клиент то где ? По аналогии с сервером программа клиента:main.cpp Код: #include <QtGui/QApplication> MyClient.h: Код: #ifndef MYCLIENT_H MyClient.cpp Код: #include "myclient.h" MyClient.pro Код: TEMPLATE = app Также как для сервера создать редактором файл d.dat для передачи серверу Немного скорректировал сервер - выше подправил коды. И перед обменом между машинами в системе МСВС надо настроить сеть один как клиент , а 2-й комп настроить как сервер с названием server1 Название: Re: Обмен QTcpServer Отправлено: qate от Январь 30, 2015, 13:26 передает данные туда и обратно, нет бага
зачем в коде есть "str.toAscii" ? на будущее если будешь выкладывать проекты - прикрепляй их zip архивом Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 30, 2015, 13:32 Гениально)
Предположение моё написанное на 1 странице верно - проблема в системе. :D Название: Re: Обмен QTcpServer Отправлено: BigHom от Январь 30, 2015, 14:03 передает данные туда и обратно, нет бага файл 2млн.байт передаёт без зависания?зачем в коде есть "str.toAscii" ? на будущее если будешь выкладывать проекты - прикрепляй их zip архивом Название: Re: Обмен QTcpServer Отправлено: qate от Январь 30, 2015, 14:08 да 3 млн передал, и три раза, и в обе стороны
но я заменил "server1" на IP т.к. не имею dhcp, но это не должно оказывать влияние т.к. нужно только для коннекта Название: Re: Обмен QTcpServer Отправлено: Bepec от Январь 31, 2015, 17:42 Могу даже навскидку предположить, что постоянная отправка пакетов блокируется системой.
Ведь вы посылаете не кусками, вы пытаетесь запихнуть 3 млн байт практически непрерывно в пакеты. Потому решение вам будет - разбивайте и отправляйте кусками. :D PS % на 70 уверен что ваша проблема спокойно разрешится :) Хотя это потребует небольшого протокольчика с контролем количества кусков :) Название: Re: Обмен QTcpServer Отправлено: BigHom от Февраль 02, 2015, 08:27 Разбивал на 400тыс байт - зависает на 4 -м нажатии кнопки "передать". При размере 600тыс. байт зависает на 3-й передаче. При разбивании на 48тыс. байт - зависает на 30-м нажатии кнопки "передать" - нажатие на кнопку эквивалентно разбиванию на пакеты?
Название: Re: Обмен QTcpServer Отправлено: qate от Февраль 02, 2015, 10:54 Могу даже навскидку предположить, что постоянная отправка пакетов блокируется системой. Ведь вы посылаете не кусками, вы пытаетесь запихнуть 3 млн байт практически непрерывно в пакеты. Потому решение вам будет - разбивайте и отправляйте кусками. :D в этом нет смысла ибо tcp сам это делает Название: Re: Обмен QTcpServer Отправлено: Bepec от Февраль 02, 2015, 11:31 Не скажите. TCP делает всё сам, но реализация TCP в каждой ОС разная.
Вот реплика BigHom о кнопке опровергает мою теорию, укладываясь в отложенные 30%. Следовательно проблема всё же в системе. МСВС не пользовался и не особо интересовался, но тут надо смотреть на ограничения передачи :) И да, всё же QNAM должен выдавать ошибку после 30 секунд простоя. У вас QNAM связан со слотом ошибок? PS имеется ли в сети связующие устройства типа роутера? Есть ли у этого устройства межсетевой экран и включен ли он? Если включен, то надо попробовать повторить эксперимент с отключенным экраном и просмотреть журнал событий/блокировок. Название: Re: Обмен QTcpServer Отправлено: qate от Февраль 02, 2015, 11:58 Не скажите. TCP делает всё сам, но реализация TCP в каждой ОС разная. смысл бить я вижу только один - делать прогресс для пользователя - чтобы он мог контролировать процесс но если всего 10 мег переслать по локалке 100мбит, то бить смысла нет - влетит за 1 сек и да - это не проблема ТС - чтото у него не так в системах, а сниффером он пользоваться не умеет совет ТС - поставь виртуалку - туда две МСВС - все работать должно, далее ищи различия Название: Re: Обмен QTcpServer Отправлено: BigHom от Февраль 04, 2015, 13:52 Поставил 2 виртуалки с МСВС - программы клиент и вервер друг друга не видят. Если пускать на одной машине , то никаких зависаний(ограничений при передаче) нет, если дать имя server1
Название: Re: Обмен QTcpServer Отправлено: qate от Февраль 04, 2015, 14:23 Поставил 2 виртуалки с МСВС - программы клиент и вервер друг друга не видят. Значит сеть не настроена. Если виртуалка vmware , то надо тип сети сделать NAT, тогда машины автоматом получат IP и их можно пингануть друг другом. В программе server1 надо заменить на IP т.к. vmware не предоставляет DNS сервер в себе. |