0

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

我在进行开发的同一 Windows 系统上运行 eJabberd 2.1.3 服务器。我还在 eJabberd 服务器上创建了多个帐户(如“aaa@mydomain”、“bbb@mydomain”等)并将它们“加为好友”。

为了测试与我的客户端的连接性,我在 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");
    }

我一直在绞尽脑汁,但就是无法弄清楚我哪里可能出错了。有人可以帮忙吗?先感谢您。:)

4

3 回答 3

0

我想我想通了。由于我在使用“自定义”域的开发系统上工作,即mydomain,而不是通过公共 DNS 解析的知名 TLD,因此我必须在此处的 hosts 文件中添加一个条目:

C:\Windows\System32\drivers\etc\hosts

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

192.168.0.101 我的域名

并注释掉或删除代码中的这一行:

_xmppConn.ConnectServer = "192.168.0.101";

这将使库能够将“mydomain”的地址找出到本地开发机器上上述主机文件中指定的 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

于 2014-08-27T18:14:44.273 回答
0

ConnectServer 属性将被忽略,直到您禁用自动 SRV 解析

xmppCon.AutoResolveConnectServer = false;

这应该可以解决您的问题。

于 2014-09-03T20:44:34.997 回答
0

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

于 2015-08-05T09:10:37.523 回答