[英]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.