2014-08-27 114 views
0

我使用的是Visual Studio 2010,操作系統是Windows 7,64位。我正在進行的項目需要XMPP功能;爲此,我正在使用agsXMPP庫。項目類型是一個WPF客戶端,它在我的xmpp代碼正在運行時引發一個停留在那裏的窗口。無法將agsXmpp客戶端連接到eJabberd服務器

我在同一個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"); 
    } 

相同的代碼在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"); 
    } 

我一直在絞盡腦汁,但只是無法弄清楚我可能會出錯的地方。有人可以幫忙嗎?先謝謝你。 :)

+0

我不知道很多關於agsxmpp,但也許你需要登錄後手動發送的存在? – legoscia 2014-08-27 14:51:48

+0

@legoscia,我嘗試添加這一行:_xmppConn.AutoPresence = TRUE;在代碼中。不要去那裏。 – Najeeb 2014-08-27 14:55:05

+0

'telnet 192.168.0.101 5222'是否工作? – vitalyster 2014-08-27 18:14:37

回答

0

我想我想通了。由於我使用的是一個使用「自定義」域的開發系統,即mydomain,而不是通過公共DNS解析的着名TLD,因此我必須向位於此處的hosts文件添加條目:

C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主機

添加以下條目(假設192.168.0.101作爲dev系統的IP地址):

192.168.0.101 MYDOMAIN

,並註釋掉或在代碼中刪除此行:

_xmppConn.ConnectServer =「192.168.0.101」;

這將使庫能夠將本地開發計算機上的hosts文件中指定的IP地址「mydomain」的地址計算出來。

編輯:另外請確保您在您的系統上禁用IPV6。請參閱本主題:如何禁用IPv6 http://forum.ag-software.net/thread/682-agsXMPP-SDK-1-0-samples-How-to-call-server-on-loc

說明:http://www.techunboxed.com/2014/10/how-to-disable-ipv6-in-windows-10.html

0

,直到您禁用自動SRV與

xmppCon.AutoResolveConnectServer = false; 

此解決應該解決您的問題ConnectServer的屬性,都會被忽略。

+0

我希望我能說你的解決方案比我的解決方案更好,因爲我覺得修改代碼而不是適應環境總是有意義的。我試過這個(我之前也做過),但不幸的是它不起作用。 :(無論如何感謝您的回覆。 – Najeeb 2014-09-04 03:18:21

0

我認爲 - 基於一些非常輕的測試 - ConnectServer預計主機名並在給它一個IP地址時引發錯誤。

相關問題