簡體   English   中英

無法將agsXmpp客戶端連接到eJabberd服務器

[英]Not able to connect agsXmpp client to eJabberd server

我使用的是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");
    }

我一直在絞盡腦汁,但只是無法弄清楚哪里可能出問題了。 有人可以幫忙嗎? 先感謝您。 :)

我想我知道了。 由於我使用的開發系統使用的是“自定義”域(即mydomain) ,而不是通過公共DNS解析的知名TLD,因此我不得不向位於以下位置的hosts文件中添加一個條目:

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

添加了以下條目(假設192.168.0.101作為您的開發系統的IP地址):

192.168.0.101 mydomain

並注釋掉或刪除代碼中的這一行:

_xmppConn.ConnectServer =“ 192.168.0.101”;

這將使庫找出本地開發計算機上上面的主機文件中指定的IP地址的“ mydomain”地址。

編輯:還請確保您在系統上禁用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

除非使用以下命令禁用自動SRV解析,否則將忽略ConnectServer屬性。

xmppCon.AutoResolveConnectServer = false;

這應該可以解決您的問題。

我認為-基於一些非常輕松的測試-ConnectServer需要一個主機名,如果給它提供IP地址,則會拋出一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM