Невозможно подключить клиент 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-адрес.