Название: Jabber клиент на основе QXMPP Отправлено: vinceras от Август 27, 2010, 13:16 Всем доброго время суток. Понадобилось написать свой jabber клиент. Решил испольтзовать QXMMP. Пока начал по минимуму:
1. Создал форму авторизации с логином и паролем; Для тестирования зарегился на jabber.org 2. В main.cpp пытаюсь приконектиться к серверу и провести проверку, если соединение прошло удачно, то загружать основное окно. Однако client->isConnected() все время возвращает false. Вот кусок кода main.cpp Код:
В QXmppClientLog.log: Цитировать 12:50:40.883 INFO Connecting to: jabber.org:5222 12:50:41.023 DEBUG Host found 12:50:41.211 INFO Connected 12:50:41.211 SENT <?xml version='1.0'?><stream:stream to='jabber.org' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/ streams' version='1.0'> 12:50:41.429 RECEIVED <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='jabber.org' id='9323103ab3cb9ad2' version='1.0'><stream:features><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/ ><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>CRAM-MD5</mechanism><mechanism>LOGIN</ mechanism><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></ mechanisms><compression xmlns='http://jabber.org/features/compress'><method>zlib</method></compression><ver xmlns='urn:xmpp:features:rosterver'><optional/></ver></stream:features> 12:50:41.429 SENT <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/> 12:50:41.617 RECEIVED <challenge xmlns='urn:ietf:params:xml:ns:xmpp- sasl'>bm9uY2U9IjMrOVUxVllBTnZGQUQvNjdRdzhKc0gvTUtKUFZLb3Y0Q1EvelNWb1MwdFE9IixyZWFs bT0iamFiYmVyLm9yZyIscW9wPSJhdXRoIixtYXhidWY9MTYzODQsY2hhcnNldD11dGYtOCxhbGdvcml0a G09bWQ1LXNlc3M=</challenge> 12:50:41.617 SENT <response xmlns='urn:ietf:params:xml:ns:xmpp- sasl'>Y2hhcnNldD11dGYtOCxjbm9uY2U9Im02cGRtNEYvVmpaZE1YWUQ3UkszMVFVOWV1RnZvWk5SV EhJU2NyRUZ6c1U9IixkaWdlc3QtdXJpPSJ4bXBwL2phYmJlci5vcmciLG5jPTAwMDAwMDAxLG5vbmNlPSIz KzlVMVZZQU52RkFELzY3UXc4SnNIL01LSlBWS292NENRL3pTVm9TMHRRPSIscW9wPWF1dGgscmVhbG0 9amFiYmVyLm9yZyxyZXNwb25zZT0xMTg1NDJmNDFiYmI2NjhlZmZlMzM1Y2EyMmZiNjc0Yix1c2VybmFtZ T1ydWJlemg=</response> 12:50:41.898 RECEIVED <success xmlns='urn:ietf:params:xml:ns:xmpp- sasl'>cnNwYXV0aD00MjJiNDUwYmFmYTEzM2IzM2MwOThmYzZlMjZkNjRjNQ==</success> 12:50:41.898 DEBUG Authenticated 12:50:41.898 SENT <?xml version='1.0'?><stream:stream to='jabber.org' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/ streams' version='1.0'> 12:50:42.086 RECEIVED <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='jabber.org' id='83b1068991ccb2fa' version='1.0'><stream:features><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/ ></bind><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/><compression xmlns='http://jabber.org/features/ compress'><method>zlib</method></compression><ver xmlns='urn:xmpp:features:rosterver'><optional/></ver></stream:features> 12:50:42.086 SENT <iq id="qxmpp4" type="set"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>QXmpp</resource> </bind></iq> 12:50:42.273 RECEIVED <iq to='rubezh@jabber.org/QXmpp' type='result' id='qxmpp4'><bind xmlns='urn:ietf:params:xml:ns:xmpp- bind'><jid>rubezh@jabber.org/QXmpp</jid></bind></iq> 12:50:42.273 SENT <iq id="qxmpp6" to="jabber.org" type="set"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq> 12:50:42.461 RECEIVED <iq from='jabber.org' type='result' id='qxmpp6'/> 12:50:42.461 SENT <presence><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://code.google.com/p/qxmpp" ver="b9jg2r3aRswRJCZ08qidhNU6/LQ="/></presence> 12:50:42.476 SENT <iq id="qxmpp8" from="rubezh@jabber.org/QXmpp" type="get"><query xmlns="jabber:iq:roster"/></iq> 12:50:42.711 RECEIVED <presence from='rubezh@jabber.org/QXmpp' to='rubezh@jabber.org/QXmpp'><c xmlns="http://jabber.org/ protocol/caps" hash="sha-1" node="http://code.google.com/p/qxmpp" ver="b9jg2r3aRswRJCZ08qidhNU6/LQ="/></presence><iq to='rubezh@jabber.org/QXmpp' type='result' id='qxmpp8'><query xmlns='jabber:iq:roster' ver='0'></query></iq> 12:51:42.462 SENT <iq id="qxmpp10" to="jabber.org" from="rubezh@jabber.org/QXmpp" type="get"> <ping xmlns="urn:xmpp:ping"/></iq> 12:51:42.649 RECEIVED <iq from='jabber.org' to='rubezh@jabber.org/QXmpp' type='result' id='qxmpp10'/> 12:52:42.463 SENT <iq id="qxmpp13" to="jabber.org" from="rubezh@jabber.org/QXmpp" type="get"> <ping xmlns="urn:xmpp:ping"/></iq> 12:52:42.651 RECEIVED <iq from='jabber.org' to='rubezh@jabber.org/QXmpp' type='result' id='qxmpp13'/> Помогите пожалуйста разобраться кто работал с qxmpp? Название: Re: Jabber клиент на основе QXMPP Отправлено: merke от Август 27, 2010, 15:26 код который ты выложил не даст в жизни разобраться с проблемой. Выкладывай исходники класса QXmppClient.
Название: Re: Jabber клиент на основе QXMPP Отправлено: Пантер от Август 27, 2010, 16:30 Покопай psi, он на Кьютах написан.
Название: Re: Jabber клиент на основе QXMPP Отправлено: БАТ от Август 27, 2010, 20:25 А сюда заглядывал http://code.google.com/p/qxmpp/wiki/UsingQXmpp (http://code.google.com/p/qxmpp/wiki/UsingQXmpp)
Название: Re: Jabber клиент на основе QXMPP Отправлено: crossly от Август 31, 2010, 09:54 c QXMPP дело не имел... но подозреваю что if (client->isConnected()) вызывается раньше чем процедура соединения отработает....
Название: Re: Jabber клиент на основе QXMPP Отправлено: vinceras от Сентябрь 01, 2010, 07:50 А сюда заглядывал http://code.google.com/p/qxmpp/wiki/UsingQXmpp (http://code.google.com/p/qxmpp/wiki/UsingQXmpp) Заглядывал, только читал не внимательно...Мне нужно использовать вместо isConnected() сигнал connected(), он же используеться и в примерах. Вот описание с http://qxmpp.googlecode.com/svn/doc/HEAD/html/classQXmppClient.html (http://qxmpp.googlecode.com/svn/doc/HEAD/html/classQXmppClient.html) Цитировать void QXmppClient::connected() [signal] This signal is emitted when the client connects successfully to the XMPP server i.e. when a successful XMPP connection is established. XMPP Connection involves following sequential steps: TCP socket connection Client sends start stream Server sends start stream TLS negotiation (encryption) Authentication Resource binding Session establishment After all these steps a successful XMPP connection is established and connected() signal is emitted. After the connected() signal is emitted QXmpp will send the roster request to the server. On receiving the roster, QXmpp will emit QXmppRosterManager::rosterReceived(). After this signal, QXmppRosterManager object gets populated and you can use rosterManager() to get the handle of QXmppRosterManager object. Хотя, вот описание isConnected(): Цитировать bool QXmppClient::isConnected( ) const Returns true if the client is connected to the XMPP server. Название: Re: Jabber клиент на основе QXMPP Отправлено: Grom от Сентябрь 05, 2010, 14:30 Думаю все дело в не блокируемом режиме, надо хватать сигналы(подсоединения),
а если через isConnect то только в отдельном потоке опрашивать, пока не законнектится и не выдаст true. Код быстрее долетает до if( ) - чем устанавливается соединение. Название: Re: Jabber клиент на основе QXMPP Отправлено: stump от Октябрь 02, 2010, 15:55 Никто не пробовал в контакт через QXmpp отправлять сообщения??
Название: Re: Jabber клиент на основе QXMPP Отправлено: bvn13 от Октябрь 02, 2010, 21:23 посмотри примеры. там все просто и понятно.
Название: Re: Jabber клиент на основе QXMPP Отправлено: stump от Октябрь 03, 2010, 11:13 посмотри примеры. там все просто и понятно. Согласен.Все просто, понятно, но ничего не работает... Отправляю сообщения, используя QXmppClient::sendPacket (const QXmppPacket &)... В логах прописывается, что <message></message> отправлен...но в реале ничего не приходит... Сообщение доходит только в том случае, если я отправляю его сразу по принятии сигнала QXmppClient::connected()...и все...в произвольный момент времени отправлять сообщения не получается...мистика :-\ Название: Re: Jabber клиент на основе QXMPP Отправлено: bvn13 от Октябрь 03, 2010, 20:11 я в примерах изменил подключение на свои данные - все работает.
Название: Re: Jabber клиент на основе QXMPP Отправлено: stump от Октябрь 13, 2010, 21:09 я в примерах изменил подключение на свои данные - все работает. именно к контакту?? :o можешь пример выложить?? Название: Re: Jabber клиент на основе QXMPP Отправлено: bvn13 от Октябрь 17, 2010, 20:36 Взять тот же эхо-клиент.
main.cpp: Код: #include <QtCore/QCoreApplication> echoclient.h: Код: #ifndef ECHOCLIENT_H echoclient.cpp: Код: #include "echoClient.h" клиент коннектится под аккаунтом, слушает все, что ему придет, и отвечает тем же сообщением. но смысл понятен Название: Re: Jabber клиент на основе QXMPP Отправлено: stump от Октябрь 18, 2010, 18:44 нужен пример именно с vk.com, а не с gmail.com :-[
Название: Re: Jabber клиент на основе QXMPP Отправлено: crossly от Октябрь 18, 2010, 19:45 а какая разница??
Название: Re: Jabber клиент на основе QXMPP Отправлено: BloodyTux от Октябрь 23, 2010, 18:01 Цитировать нужен пример именно с vk.com, а не с gmail.com Обеспокоенный Если еще актульно - я делал клиент под сервер Вконтакте. Через vk.com QXmpp не работает, зато работает через vkmessanger.com. :) Название: Re: Jabber клиент на основе QXMPP Отправлено: stump от Октябрь 24, 2010, 07:51 Если еще актульно - я делал клиент под сервер Вконтакте. Через vk.com QXmpp не работает, зато работает через vkmessanger.com. :) 8) я так и знал! а при использовании vkmessanger.com, есть какие-то заморочки с DNS?? просвети ;) Название: Re: Jabber клиент на основе QXMPP Отправлено: BloodyTux от Октябрь 24, 2010, 10:12 Как раз никаких заморочек. С официального сайта:
Цитировать Для клиентов, не поддерживающих работу с DNS-записями, в качестве сервера нужно указать vkmessenger.com. |