即时通讯软件的离线消息获取

jayqean 2011-05-31 04:33:07
做一个IM,采用的smack.jar/smackx.jar两个jar包
连接服务器端成功后,无法获取离线消息

OfflineMessageManager offlineManager = new OfflineMessageManager(conn); Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager.getMessages();
while(it.hasNext()){
org.jivesoftware.smack.packet.Message message = it.next(); System.out.println("收到离线消息, Received from 【" + message.getFrom() + "】 message: " + message.getBody());
}

首先已经确定服务器端能在客户端上线后发送了离线消息.
有做过的童鞋,可以指点下麽

offlineManager.getMessageCount() 打印出来是0
想用gmail的邮箱测试,奈何公司的网络很差
有哪位好心人帮我测试下就好,用两个gmail邮箱 在对方离线的时候发送条消息 在用下面的代码登录离线的那个帐号,测试有没有收到


import java.util.Iterator;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.OfflineMessageManager;

public class Test {

public static XMPPConnection getConn() {
ConnectionConfiguration conf = new ConnectionConfiguration("gmail.com",
5222);
conf.setSASLAuthenticationEnabled(false);// gtalk不支持SASL验证,设置为false
conf.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
conf.setCompressionEnabled(false);
XMPPConnection conn = new XMPPConnection(conf);
return conn;
}

public static void main(String[] args) {
XMPPConnection conn = getConn();
try {
conn.connect();
conn.login("username", "password");
Presence presence = new Presence(Presence.Type.available);
conn.sendPacket(presence);
OfflineMessageManager offlineManager = new OfflineMessageManager(conn);
System.out.println(offlineManager.getMessageCount());
Iterator<org.jivesoftware.smack.packet.Message> it = offlineManager.getMessages();
while(it.hasNext()){
org.jivesoftware.smack.packet.Message message = it.next();
System.out.println("收到离线消息, Received from 【" + message.getFrom() + "】 message: " + message.getBody());
}
} catch (XMPPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

...全文
264 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jayqean 2011-06-02
  • 打赏
  • 举报
回复
我使用OfflineMessageManager这个类没有获取成功,Thread.sleep(10000);也没收到
jayqean 2011-06-02
  • 打赏
  • 举报
回复
连接gmail邮箱,
更正下

public static XMPPConnection getConn() {
ConnectionConfiguration conf = new ConnectionConfiguration("gstalk.guoshi.com",
5222);
XMPPConnection conn = new XMPPConnection(conf);
return conn;
}


另外离线消息的获取,是服务器在你客户端上线后主动发送过来的,你可以想监听正常情况下聊天消息一样,监听得到离线消息
如果发现你写的测试代码没有获取得到,将主线程sleep段时间吧
chenchenyangll 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jayqean 的回复:]

终于解决了,够折腾的.
[/Quote]

解决了最好贴个解决方案 以后如果别人有同样问题就搜索的到答案了~
jayqean 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 longyi007 的回复:]
学习了
[/Quote]
额,
longyi007 2011-05-31
  • 打赏
  • 举报
回复

学习了
jayqean 2011-05-31
  • 打赏
  • 举报
回复
终于解决了,够折腾的.
jayqean 2011-05-31
  • 打赏
  • 举报
回复
相关jar包可以从http://www.igniterealtime.org/downloads/index.jsp上获取

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧