Название: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 15:17 Добрый день, %username%
Код: tcpServer = new QTcpServer(this); Код выполняется, выводит сообщение "true TCPSocket listen on port" т.е. все нормально... Но при соединении клиента, слот не запускается (клиент успешно присоединяется по сокету) Приведенный выше код - ф-я on_starting() Все входит в один класс: Код: class serv : public QObject Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: Bepec от Октябрь 08, 2013, 18:26 Разбавлю тишину - ни в чём. Всё должно работать.
Если не уверен что правильно соединяется - проверяй возвращаемое значение connect. Там буль возвращает. Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 21:07 Если имеется ввиду QObject::connect, то там возвращается не буль, а QMetaObject
Кстати, после Код: tcpServer->listen(QHostAddress::LocalHost, 7777); Код: tcpServer->isListening() Под дебагом проходил пошагово открытие сокета на клиенте, там socket->connectToHost проходит успешно и все соединяется, но в момент соединения в сервере привязанный метод newuser() не вызывается Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: kibsoft от Октябрь 08, 2013, 21:53 Я так понял у вас Qt5. Вот из доки:
Цитировать The function returns a QMetaObject::Connection that represents a handle to a connection if it successfully connects the signal to the slot. The connection handle will be invalid if it cannot create the connection, for example, if QObject is unable to verify the existence of either signal or method, or if their signatures aren't compatible. You can check if the handle is valid by casting it to a bool. Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: alexandros от Октябрь 08, 2013, 21:58 Код
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:11 Я так понял у вас Qt5. Вот из доки: Цитировать The function returns a QMetaObject::Connection that represents a handle to a connection if it successfully connects the signal to the slot. The connection handle will be invalid if it cannot create the connection, for example, if QObject is unable to verify the existence of either signal or method, or if their signatures aren't compatible. You can check if the handle is valid by casting it to a bool. привел, все ок, true Однако при новом соединении метод все равно не вызывается Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:14 Код
что с этим делать? Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: kibsoft от Октябрь 08, 2013, 22:18 Цитировать socket->connectToHost проходит успешно и все соединяется Как проверяли, что соединяется?Сразу после connectToHost поставьте qDebug()<<socket->waitForConnected() в клиенте. Должно возвратить true. Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:19 Вот, кстати, сам сервер
https://github.com/farcost/ourtrack/tree/master/ourtrackserv Клиент: https://github.com/farcost/ourtrack/tree/master/ourtrack Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:20 Цитировать socket->connectToHost проходит успешно и все соединяется Как проверяли, что соединяется?Сразу после connectToHost поставьте qDebug()<<socket->waitForConnected() в клиенте. Должно возвратить true. так и проверяю: Код: socket->connectToHost(host, port); успешно минует условие Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: kibsoft от Октябрь 08, 2013, 22:22 Зачем в сервере 29 строка? tcpServer->newConnection();
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:23 это просто проверял, случайно в коммит попало) в оригинале ее нет)
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: kibsoft от Октябрь 08, 2013, 22:24 Косяк в 57 строке клиента.
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:26 в чем состоит косяк,
сокет закрывается просто сразу, метод newConnection то должен вызываться на сервере, или я не прав? Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: kibsoft от Октябрь 08, 2013, 22:27 Цитировать Reimplemented from QIODevice::close(). Скорее всего просто не успевает выслать или что-то в этом роде.Closes the I/O device for the socket, disconnects the socket's connection with the host, closes the socket, and resets the name, address, port number and underlying socket descriptor. See QIODevice::close() for a description of the actions that occur when an I/O device is closed. Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:31 убрал, пересобрал, не вызывается.
пойду комп ребутну на всякий случай Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 08, 2013, 22:43 ну точно не клиент, перенес socket->close(), ребутнул комп, пересобрал и тоже самое, newuser() на сервере не запускается
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 09, 2013, 19:31 может еще кто то разбавит тишину?
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 10, 2013, 15:20 Продолжу излагать то, что пытался делать с целью поднять тему и возродить дискуссию актуальной проблемы:
на клиенте после socket->ConnetToHost() вызываю метод socket->state(), приводя его к bool результат: возвращает true т.е. клиент нормально конектится, при этом метод newuser(), привязанный к сигналу newConnection() все также не вызывается( Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: Bepec от Октябрь 10, 2013, 17:33 Хотите помощи и уверены что проблема не в вашем коде - делайте минимальный компилируемый пример вашей неполадки и выкладывайте в архиве. Тогда вам помогут.
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 10, 2013, 19:27 Исходников на гитхабе мало?
Qt последняя версия + Add-In Visual studio (MS VS 2010) вот актуальные исходники http://rghost.ru/49294418 Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: Bepec от Октябрь 10, 2013, 20:11 Мало. Ибо не люблю гитхаб. Люблю архивы на prog.org.ru или иных ресурсах "в один клик".
Посмотрел ваш проект. Вас не смущает вот этот код? Код: QCoreApplication a(argc, argv); Не смущает, видимо. Суть - асинхронные интерфейсы в Qt используют систему сигнал-слотов. Краткий экскурс - сигнал слоты работают после a.exec(). Краткое подведение итогов - теперь вы знаете, что вам нужно вызывать exec для работы сигнал слотов. Окончательное решение проблемы - поменять код ввода команд, задуматься над архитектурой. PS Базис для раскопок я дал, даже много. Вот работающий сервер - Код: #include <QtCore/QCoreApplication> Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: vaansk от Октябрь 10, 2013, 20:14 благодарю
Название: Re: [socket] Не соединяет SIGNAL(newConnection()) со слотом Отправлено: Bepec от Октябрь 10, 2013, 20:54 Пожалуйста.
В принципе тему можно или удалить или закрыть. Я склоняюсь к удалить, проблема массовая. PS решайте сами :) Только вы царь этой темы. |