无法将agsXmpp客户端连接到eJabberd服务器

时间:2014-08-27 14:49:29

标签: .net xmpp ejabberd agsxmpp

我使用的是Visual Studio 2010,操作系统是Windows 7,64位。我正在开发的项目需要XMPP功能;为此,我正在使用agsXMPP库。项目类型是一个WPF客户端,它会在我的xmpp代码运行时抛出一个窗口。

我在我正在进行开发的同一个Windows系统上运行eJabberd 2.1.3服务器。我还在eJabberd服务器上创建了多个帐户(例如" aaa @ mydomain"," bbb @ mydomain"等等)和" friended"他们彼此。

为了测试与我的客户端的连接,我在Windows上使用Pandion Jabber客户端,在同一网络上使用我的Android上的Xabber客户端。设置工作正常,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");
    }

当我从另一个FB帐户向该帐户发送消息时,相同的代码在Facebook聊天工作正常。

    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 个答案:

答案 0 :(得分:0)

我想我明白了。因为我在开发系统上使用&#34; custom&#34;域名,即 mydomain ,而不是通过公共DNS解析的知名TLD,我不得不在这里的hosts文件中添加一个条目:

C:\ Windows \ System32下\驱动程序\等\主机

添加了以下条目(假设您的开发系统的IP地址为192.168.0.101):

192.168.0.101 mydomain

在代码中注释掉或删除此行:

_xmppConn.ConnectServer =&#34; 192.168.0.101&#34;;

这将使图书馆能够找出&#34; mydomain&#34;的地址。到本地开发机器上面的hosts文件中指定的IP地址。

编辑:还要确保在系统上禁用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

答案 1 :(得分:0)

在您使用

禁用自动SRV解析之前,将忽略ConnectServer属性
xmppCon.AutoResolveConnectServer = false;

这可以解决您的问题。

答案 2 :(得分:0)

我认为 - 基于一些非常轻松的测试 - ConnectServer需要一个主机名,如果你给它一个IP地址就会抛出错误。

相关问题