我目前正在研究我的大学项目,这是一个Android-App,它应该向服务器提供数据.
为此,我需要通过XMPP与服务器建立或多或少的一致连接.连接在100%的时间内并不是很重要,但是因为系统应该或多或少地对用户不可见,所以用户交互应该是最小的.
服务器和客户端都是xmpp-clients.我jabber.org用作xmpp服务器.
我有一个Android服务,它建立与服务器的连接并提供数据,这很好.
现在我尝试在连接丢失或从Wifi更改为GSM时重新连接服务.我想尝试使用广播接收器来监听NETWORK_STATE_CHANGED_ACTION.但我甚至没有这么做.
这是问题:我尝试运行应用程序,然后只是禁用我的WiFi.我的电话比自动切换到GSM,我失去了我的连接(我预期).但是当我尝试手动重新连接(例如重新启动服务)时,我从服务器获得错误.我的状态仍然"可用".从那一刻起,它需要太长时间,直到我再次连接.
06-29 18:12:14.888: WARN/System.err(14246): resource-constraint(500)
06-29 18:12:14.890: WARN/System.err(14246): at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:110)
06-29 18:12:14.890: WARN/System.err(14246): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:404)
06-29 18:12:14.890: WARN/System.err(14246): at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:349)
....
Run Code Online (Sandbox Code Playgroud)
我实际连接到xmpp服务器,但它不传递我的消息:
06-29 18:12:14.882: INFO/System.out(14246): 06:12:14 nachm. RCV (1079704816): <iq type='error' id='7rhk4-70'><error code='500' type='wait'><resource-constraint xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>
Run Code Online (Sandbox Code Playgroud)
有时我没有收到错误,但仍然没有传递消息.
所以我认为服务器不允许我连接,因为在尝试重新连接之前我没有断开连接.我发现这很奇怪,因为我认为你甚至可以从多个客户端连接到一个帐户.
我发布了一些我认为可能相关的代码:
public void connectToServer() throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration(
serverADD, port,
service);
connection = new XMPPConnection(config);
connection.connect();
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
connection.login(user_JID,password);
Presence presence = new Presence(Presence.Type.available);
presence.setStatus("available");
presence.setPriority(24);
presence.setMode(Presence.Mode.available);
connection.sendPacket(presence);
}
Run Code Online (Sandbox Code Playgroud)
这是我发送消息的方式: …