Название: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 03, 2014, 08:51 Здравствуйте. Необходимо реализовать работу с сетью по протоколу UDP на Qt 3.
Программа должна соединяться с многими устройствами, у каждого устройства есть основной и резервный канал. Для этого написан класс NetInterface, содержащий два сокета для основного и для резервного канала. Когда создан один сокет(setPrimaryChannel или setSecondaryChannel), работают и передача и прием. Если создать оба сокета, то сокеты работают только на передачу - сигнал activated при получении данных не возникает. Выяснилось, что дело именно в сокетах - достаточно добавить в метод setPrimaryChannel строку Код чтобы перестал работать прием. Если сокеты не находятся в одном классе-наследнике QObject, то они успешно работают вместе. Во всех примерах к Qt3 в классе только один сокет. Является ли это каким-то известным багом Qt 3, и как его обходить? Код
Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: OKTA от Март 03, 2014, 09:30 А вы уверены, что можно дважды подцепиться к одному и тому же сокету?
Проверьте, что возвращает bind + по логике работы резервных каналов, резерв включается тогда, когда отпадает основной канал, а не работает постоянно + опять же если уж так надо, чтобы она работал постоянно, выделите ему отдельный порт. Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 03, 2014, 09:33 Что значит к одному и тому же сокету?
Создаются два сокета pSocket и sSocket. Порты у них точно разные, адреса могут быть одинаковыми. Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: OKTA от Март 03, 2014, 09:39 Да, пардон, не туда посмотрел с портами.. хм.. тогда все еще запутаннее :(
Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 03, 2014, 09:55 Данные должны постоянно отправляться в оба канала.
bind и connect возвращают true, то есть вроде бы ошибок нет. Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: OKTA от Март 03, 2014, 10:40 А сигнал activated вообще ни разу не эмитится? Нашел вот что. Мало ли ???
Код: Notes for Windows Users Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 03, 2014, 10:54 А сигнал activated вообще ни разу не эмитится? Ни разу.Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: OKTA от Март 03, 2014, 11:26 Идеи кончились :(
Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: Bepec от Март 03, 2014, 11:32 я б советовал не мучаться и сделать на WinApi. Скорость обработки выше и делается элементарно :P
Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 03, 2014, 11:54 Программа под QNX. Там только Qt3 или unix-сокеты.
Если переходить на unix-сокеты, надо ли создавать отдельный поток для прослушки каждого сокета ? Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: Old от Март 03, 2014, 19:58 Является ли это каким-то известным багом Qt 3, и как его обходить? Уже сложно сказать был ли такой баг, а обойти его можно сделав класс Channel наследником QObject и в нем хранить один сокет с обвязкой. А в классе NetInterface поместить два объекта Channel.Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: qtkoder777 от Март 07, 2014, 09:21 Отключил нескольких клиентов, и ошибка исчезла.
Кажется, что в Qt3 есть ограничение на число сокетов в одной программе. Можно ли его изменить? Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: Bepec от Март 07, 2014, 09:56 Мб это в QNX какие то ограничения?
Название: Re: [Qt 3] Два сокета QSocketDevice в одном классе-наследнике QObject Отправлено: OKTA от Март 07, 2014, 10:10 TCP/IP limits
The number of open connections and sockets is limited only by memory and by the maximum number of file descriptors per process (see "File descriptors," above). http://www.qnx.com/developers/docs/6.3.0SP3/neutrino/user_guide/limits.html |