我尝试使用XMPP协议和Jabber-net编写应用程序。
问题是什么?
JabberClient client = new JabberClient();
client.User = USER_NAME;
client.Password = PASSWORD;
client.Server = SERVER;
client.Resource = "MyTestClient";
client.Port = 5222;
client.AutoReconnect = 1;
client.AutoPresence = false;
client.KeepAlive = 10;
client.PlaintextAuth = true;
client.AutoLogin = true;
client.OnConnect += client_OnConnect;
client.OnAuthenticate += new bedrock.ObjectHandler(client_OnAuthenticate);
client.OnInvalidCertificate += client_OnInvalidCertificate;
client.OnError += new bedrock.ExceptionHandler(client_OnError);
client.OnIQ += client_OnIQ;
client.OnProtocol += client_OnProtocol;
client.Connect();
,全局变量就像这些
string USER_NAME = "09371231231";
string PASSWORD = "09371231231";
string SERVER = "181.29.101.224";
为什么我不能登录???
答案 0 :(得分:1)
调用onInvalidCertificate事件处理程序时,XMPP服务器的TLS / SSL证书不受信任。这种情况通常发生在此证书是自签名,已过期或未颁发IP地址但DNS名称时。如果证书发给your-server.yourdomain.com,您还必须连接到your-server.yourdomain.com,而不是要检查证书的IP地址。
在此事件处理程序中,您可以告诉jabber-net连接到服务器desipte无效证书。 IIRC这是通过返回true来完成的。对于测试,这是可以的,对于成品,您应该无论如何向用户提供证书(如Web浏览器)。
编辑/回复您的评论:服务器告诉您,您的请求仍然存在问题。在不知道实际请求的情况下,很难猜出问题是什么。也许你可以在服务器日志中找到提示。如果没有,您应该仔细查看流量,尤其是失败的请求。
如果您需要嗅探流量,这里是我用来禁用TLS和压缩的代码,以便我可以在wireshark跟踪中看到一些内容:
client.SSL = false;
client.PlaintextAuth = true;
client.AutoStartTLS = false;
client.AutoStartCompression = false;
顺便说一下,这也可以防止无效的证书错误,但是用户应该可以配置他是否要使用TLS。