Невозможно подключить клиент agsXmpp к серверу eJabberd

Я использую Visual Studio 2010, и ОС Windows 7, 64-разрядная. Проект, над которым я работаю, нуждается в функциональности XMPP; для этого я использую библиотеку agsXMPP. Тип проекта - это клиент WPF, который выдает окно, которое остается там, пока выполняется мой код xmpp.

Я использую сервер eJabberd 2.1.3 в той же системе Windows, на которой я занимаюсь разработкой. Я также создал несколько учетных записей на сервере eJabberd (например, "aaa@mydomain", "bbb@mydomain" и т. Д.) И "подружил" их друг с другом.

Для тестирования соединения с моим клиентом я использую клиент Pandion Jabber в Windows и клиент Xabber в Android в той же сети. Настройка работает нормально, и клиенты Xabber и Pandion могут обмениваться сообщениями друг с другом. Просто чтобы убедиться, что нет помех, я временно отключил брандмауэр.

Проблема: я не могу подключить свою программу к серверу eJabberd. Присутствие просто не отображается на других клиентах, когда окно открывается. Я использую следующий код:

    string uname = "aaa", domain_server = "mydomain", resource = "res1", password = "password";

    Jid jid = new Jid (uname, domain_server, resource);

    XmppClientConnection _xmppConn = new XmppClientConnection (jid.Server);

    // This is my development machine's IP address
    _xmppConn.ConnectServer = "192.168.0.101";

    _xmppConn.Server = domain_server;

    _xmppConn.Open (jid.User, password);

    // The event handlers:
    _xmppConn.OnLogin += new ObjectHandler (_xmppConn_OnLogin);
    _xmppConn.OnMessage += new agsXMPP.protocol.client.MessageHandler (_xmppConn_OnMessage);

    void _xmppConn_OnMessage (object sender, agsXMPP.protocol.client.Message msg) {
        MessageBox.Show (msg.Body);
    }

    void _xmppConn_OnLogin (object sender) {
        MessageBox.Show ("Logged in");
    }

Тот же код отлично работает в чате Facebook, когда я отправляю сообщение из другой учетной записи FB.

    string uname = "<my fb name>", domain_server = "facebook.com", resource = "res1", password = "<my password>";

    Jid jid = new Jid (uname, domain_server, resource);

    XmppClientConnection _xmppConn = new XmppClientConnection (jid.Server);

    _xmppConn.Server = "chat.facebook.com";

    _xmppConn.Open (jid.User, password);

    // The event handlers:
    _xmppConn.OnLogin += new ObjectHandler (_xmppConn_OnLogin);
    _xmppConn.OnMessage += new agsXMPP.protocol.client.MessageHandler (_xmppConn_OnMessage);

    void _xmppConn_OnMessage (object sender, agsXMPP.protocol.client.Message msg) {
        MessageBox.Show (msg.Body);
    }

    void _xmppConn_OnLogin (object sender) {
        MessageBox.Show ("Logged in");
    }

Я ломал себе голову, но просто не могу понять, где я могу пойти не так. Может кто-нибудь помочь, пожалуйста? Заранее спасибо.:)

3 ответа

Решение

Я думаю, что я понял это. Поскольку я работал в системе разработки, работающей с "пользовательским" доменом, то есть с mydomain, а не с широко известным TLD, разрешенным через общедоступный DNS, мне пришлось добавить запись в файл hosts, расположенный здесь:

C: \ Windows \ System32 \ Drivers\ Etc\ хостов

Добавлена ​​следующая запись (предполагается, что в качестве IP-адреса вашей системы разработки используется 192.168.0.101):

192.168.0.101 mydomain

И закомментируйте или удалите эту строку в коде:

_xmppConn.ConnectServer = "192.168.0.101";

Это позволит библиотеке определить адрес "mydomain" по IP-адресу, указанному выше в файле hosts на вашем локальном компьютере разработки.

Изменить: Также убедитесь, что вы отключите IPV6 в вашей системе. Смотрите эту ветку: http://forum.ag-software.net/thread/682-agsXMPP-SDK-1-0-samples-How-to-call-server-on-loc

Инструкции по отключению IPV6: http://www.techunboxed.com/2014/10/how-to-disable-ipv6-in-windows-10.html

The ConnectServer property gets ignored until you disable the automatic SRV resolving with

xmppCon.AutoResolveConnectServer = false;

Это должно решить вашу проблему.

Я думаю - основываясь на очень легком тестировании - что ConnectServer ожидает имя хоста и выдает ошибку, если вы дадите ему IP-адрес.

Другие вопросы по тегам