我使用的是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");
}
我一直绞尽脑汁,但我无法弄清楚自己可能出错的地方。有人可以帮忙吗?先感谢您。 :)
答案 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地址就会抛出错误。