smark和openfire即时通信代码Word文档格式.docx
- 文档编号:15813342
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:18
- 大小:22.10KB
smark和openfire即时通信代码Word文档格式.docx
《smark和openfire即时通信代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《smark和openfire即时通信代码Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
//设置成disabled,则不会去验证服务器证书是否有效,默认为enabled
config.setSecurityMode(SecurityMode.disabled);
//设置可以调试,默认为false,老版本的写法为XMPPConnection.DEBUG_ENABLED=true;
config.setDebuggerEnabled(true);
//设置是否在登陆的时候告诉服务器,默认为true
config.setSendPresence(false);
//XMPPConnection在后来的版本中改成了抽象类
XMPPConnectionconn=newXMPPTCPConnection(config);
//设置等待时间
conn.setPacketReplyTimeout(5000);
conn.connect();
//用户名,密码,资源名(例如:
如果是用潘迪安发送的消息,则资源名就是:
潘迪安,用于标识客户端)
conn.login("
admin"
"
0"
资源名"
);
关于连接的参数,在新版本中全部在config中设置
发送消息[html]viewplaincopyprivatevoidtestSendMessage(XMPPConnectionconn)throwsException{
//jid在数据表中ofroster可以查到,一般是用户名@服务器名称
Chatchat=ChatManager.getInstanceFor(conn).createChat("
ly@192.168.1.100"
newMessageListener(){
@Override
publicvoidprocessMessage(Chatchat,Messagemessage){
System.out.println("
Receivedmessage:
"
+message);
}
});
Messagemsg=newMessage();
msg.setBody("
helloworld"
//定义成normal,在对象不在线时发送离线消息,消息存放在数据表ofoffline中
msg.setType(Message.Type.normal);
//发送消息,参数可以是字符串,也可以是message对象
chat.sendMessage(msg);
//发送广播
conn.sendPacket(msg);
}发送离线消息[java]viewplaincopyprivatevoidtestOffLine(XMPPConnectionconn)throwsException{
//离线文件
OfflineMessageManageroffMM=newOfflineMessageManager(conn);
离线文件数量:
"
+offMM.getMessageCount());
离线文件内容:
//经测试,当调用getMessages时,会触发chat设置的监听器,从而输出离线消息内容,但是getMessages方法返回的离线消息为空
//猜测回调函数的触发条件是一个变量,方变量改变时(while(flag)),执行回调函数
List&
lt;
Message&
gt;
listMessage=offMM.getMessages();
//listMessage的大小为0
System.out.println(listMessage.size());
for(Messagem:
offMM.getMessages()){
离线:
+m.getBody()+m.getBodies());
}得到好友列表[java]viewplaincopyprivatevoidtestGetRoster(XMPPConnectionconn)throwsException{
//得到该user的roster(相当于好友列表),不区分是否在线
Rosterr=conn.getRoster();
Collection&
RosterEntry&
c=r.getEntries();
for(RosterEntryre:
c){
StringBuildersb=newStringBuilder();
sb.append("
name:
).append(re.getName());
\nuser:
).append(re.getUser());
\ntype:
).append(re.getType());
\nstatus:
).append(re.getStatus());
System.out.println(sb.toString());
-----------------------------"
System.out.println(r.getEntries());
//输出内容
/*name:
null
user:
ly@192.168.1.100
type:
from
status:
-----------------------------
name:
yy@192.168.1.100
to
[ly@192.168.1.100,yy@192.168.1.100]
*/
}管理好友,监听好友请求[java]viewplaincopy&
prename="
code"
class="
java"
&
[java]viewplaincopy&
/pre&
privatevoidtestAddAndDelFriends(finalXMPPConnectionconn)throwsException{
//用户的jid,昵称,用户的分组。
如果该用户不存在也可以添加
//r.createEntry("
yy@192.168.1.100"
yy"
null);
//rosterEntry的构造方法是包访问权限,不能直接new
//RosterEntryentry=r.getEntry("
//r.removeEntry(entry);
//监听所有的请求,之后可以过滤掉不想要的请求
PacketListenerpacketListener=newPacketListener(){
publicvoidprocessPacket(Packetpacket)throwsNotConnectedException{
/*
available
unavailable
subscribe发出添加好友的请求
subscribed同意添加好友
unsubscribe发出删除好友请求
unsubscribed删除好友(即拒绝添加好友),
备注:
对方发出添加好友的请求后,在服务器端会自动把对方加入到自己的roster,所以在执行处理好友请求或添加删除好友的时候,要重新获取roster,更新好友列表
Presencepresence=(Presence)packet;
Typetype=presence.getType();
//请求添加好友
if(Type.subscribe.equals(type)){
//注意点:
要设置to(即指明要发送的对象,否则不能成功拒绝),至于from不用设置,因为在sendPacket方法中已经设置了,formMode初始化的时候为OMITTED,可以自己设置
switch(fromMode){
caseOMITTED:
packet.setFrom(null);
break;
caseUSER:
packet.setFrom(getUser());
//getUser是抽象方法
//直接用传来的presence,不能自己新建一个presence(可能要验证presence是否是原来的对象,来判断是谁拒绝了谁的好友请求),否则不能成功拒绝对方添加好友
//例:
A--presence1--&
BA---presence2---C,C---presence3---A这样服务器就没办法判断是B、C中的哪一个拒绝了A的请求
presence.setType(Type.unsubscribed);
//拒绝,发送了一条presence
//presence.setType(Type.unavailable);
//发送了两条presence,一条是subscribed,一条是unavailabled,能接受对方消息,自己的状态显示隐身,再一次登录的时候显示在线
presence.setTo(presence.getFrom());
presence.setPacketID(presence.getPacketID());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- smark openfire 即时 通信 代码