我正在使用XMPP连接(使用smack)在android应用程序中进行聊天.我已经与openfire建立了连接,我也可以发送和接收消息.但问题是当我进入XMPPClient.java活动然后它做了所以我不能得到任何消息,直到不进入那个活动.那么怎样才能在开始时建立连接,然后在其他活动中重用.Code在这2个链接ConnectionSettings文件和我们可以聊天的聊天屏幕中.在此链接中,评论行也是我的问题所以请同时查看该评论.
我想开发一个即时消息应用程序.GCM,用于推送数据是一种流行的(和有效的)方式,如果你在Android上,但由于以下原因我没有使用它:
相反,我决定建立一个传统的XMPP服务器(openFire),我正在使用Smack api(TCP连接)进行连接.到目前为止,它进展顺利,但我有一些担忧.
这是我写的一个小测试代码(它在服务中运行):
Log.d("TAG","service has started");
SmackConfiguration.setDefaultPacketReplyTimeout(10000);
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("admin", "football100")
.setServiceName("harsh-pc")
.setHost("192.168.0.200")
.setPort(5222).setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.build();
final AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
try {
conn2.connect();
conn2.login();
Presence presence = new Presence(Presence.Type.available);
presence.setStatus("online");
// Send the packet (assume we have an XMPPConnection instance called "con").
conn2.sendStanza(presence);
} catch (SmackException | IOException | XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("TAG", e.toString());
}
StanzaFilter filter=new StanzaFilter() {
@Override
public boolean accept(Stanza stanza) {
return true;
} …Run Code Online (Sandbox Code Playgroud) 我在Android上有一个项目,需要使用asmack库来实现实时聊天.
关键功能是重新连接机制,这意味着我的应用程序可以在互联网连接丢失时自动重新连接.
这是我的代码片段:
ConnectionConfiguration connConfig = new ConnectionConfiguration(HOST, PORT);
connConfig.setSASLAuthenticationEnabled(true);
connConfig.setReconnectionAllowed(true);
XMPPConnection connection = new XMPPConnection(connConfig);
Run Code Online (Sandbox Code Playgroud)
但是每当我关闭然后打开Wifi时我就会收到此错误:
10-01 21:43:26.942: W/System.err(13695): javax.net.ssl.SSLException: Write error: ssl=0x5a4ad348: I/O error during system call, Broken pipe
10-01 21:43:27.002: W/System.err(13695): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_write(Native Method)
10-01 21:43:27.012: W/System.err(13695): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:693)
10-01 21:43:27.012: W/System.err(13695): at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167)
10-01 21:43:27.012: W/System.err(13695): at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
10-01 21:43:27.012: W/System.err(13695): at java.io.BufferedWriter.flush(BufferedWriter.java:124)
10-01 21:43:27.012: W/System.err(13695): at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:210)
10-01 21:43:27.012: W/System.err(13695): at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:42)
10-01 21:43:27.012: W/System.err(13695): at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:78)
10-01 21:43:27.092: W/System.err(13695): javax.net.ssl.SSLException: Read error: ssl=0x5a4ad348: I/O …Run Code Online (Sandbox Code Playgroud)