openfire消息发送
找了一些demo,做了一些示例,演示了基于xmpp协议的openfire的客户端之间消息的发送。
代码需要两个包,smack.jar ,smackx.jar。
第一个代码,只是点对点发送消息的,不涉及广播。
package com.test; import java.io.BufferedReader;
import java.io.InputStreamReader; import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message; public class ChatTest { public static void main(String[] args) throws XMPPException {
// TODO Auto-generated method stub
XMPPConnection.DEBUG_ENABLED=true;
XMPPConnection connection=new XMPPConnection("127.0.0.1");
connection.connect();
connection.login("zhang", "12345");
Chat chat=connection.getChatManager().createChat("liu@127.0.0.1", new MessageListener() { @Override
public void processMessage(Chat chat, Message message) {
// TODO Auto-generated method stub
System.out.println(message.getFrom()+" "+new java.util.Date().toString()+" say:"+message.getBody());
}
});
BufferedReader cmdl=new BufferedReader(new InputStreamReader(System.in));
for (; ; ) {
try {
String cmd=cmdl.readLine();
if ("!q".equalsIgnoreCase(cmd)) {
break;
}
chat.sendMessage(cmd);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
connection.disconnect();
System.exit(0);
}
}
login方法里面的参数是当前要登录的账户,createchat方法中的,是聊天的对方的账号。运行时,liu在spark客户端登录,在本机的console就可以和liu交流了。
第二种涉及到广播,其实就一个方法。要使用广播功能,需要在openfire的服务器上安装一个广播的插件,不然是无法发送广播的。
package com.test; import java.util.Collection;
import java.util.Scanner; import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message; public class IMTest { public static void main(String[] args) {
// TODO Auto-generated method stub
XMPPConnection.DEBUG_ENABLED=true;
XMPPConnection connection=null;
try {
IMTest test=new IMTest();
connection=test.getConnection();
test.doLogin(connection);
test.getRoster(connection);
//test.sendMessage(connection);
test.sendPacket(connection);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
connection.disconnect();
}
} private XMPPConnection getConnection() throws XMPPException{
XMPPConnection con=new XMPPConnection("127.0.0.1");
con.connect();
return con;
} private void doLogin(XMPPConnection connection) throws XMPPException{
connection.login("admin", "12345");
System.out.println(connection.getUser()+" has logined");
} private Collection<RosterEntry> getRoster(XMPPConnection connection){
Collection<RosterEntry> roster=connection.getRoster().getEntries();
for(RosterEntry entry:roster){
System.out.println("name :"+entry.getName()+",jid:"+entry.getUser());
}
return roster;
} private void sendMessage(XMPPConnection connection) throws XMPPException{
ChatManager chatManager=connection.getChatManager();
Chat chat=chatManager.createChat("liu@127.0.0.1", new MessageListener() {
//获取对方消息
@Override
public void processMessage(Chat chat, Message message) {
// TODO Auto-generated method stub
System.out.println(message.getFrom()+" say: "+message.getBody());
}
});
//发送消息
Scanner inputScanner=new Scanner(System.in);
while(true){
String messageString=inputScanner.nextLine();
System.out.println(connection.getUser()+" say:"+messageString);
chat.sendMessage(messageString);
}
} private void sendPacket(XMPPConnection connection){
Message message=new Message();
message.setTo("all@broadcast.127.0.0.1");
message.setSubject("广播");
message.setBody("推送信息");
message.setType(Message.Type.normal);//离线支持
connection.sendPacket(message);
connection.disconnect();
}
}
发送广播的时候,setTo里面,@后面有broadcast标识,这个不能少。
不过目前广播消息,有时候会出现消息重复发送的情况。目前是打算采用上篇文章中所说的androidpn来做消息推送了,这里就没有再过多仔细研究。
openfire消息发送的更多相关文章
- 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了
开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*; ...
- openfire自定义发送消息
加入以下类: 这个是xml格式的,解析时可以将xml转成map,参数可自由定义 import org.jivesoftware.smack.packet.PacketExtension; /** * ...
- openfire消息通知推送
package cn.zsmy.utils.openfire; import java.io.BufferedReader; import java.io.InputStreamReader; imp ...
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
- Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件
引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- activemq安装与简单消息发送接收实例
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...
- eBay 消息发送(2)
1.简介 Call Index Doc: http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/index.html 消息发送主要 ...
随机推荐
- Android自定义实现微信标题栏
Android自定义实现微信标题栏 前言:在android的开发中有时我们需要更个性化的标题栏,而不仅仅是系统预定义的图标加软件名,同时有时候我们需要在标题栏中实现更多功能,如添加按钮响应用户 ...
- toString方法的用法
public class JLDtoS { public static void main(String[]args) { long a=123; Long aa=new Long ...
- for循环语句输出菱形
for(int a = 5; a > 0 ; a--){ for(int b = 1; b <= a; b++){ System.out.print(" "); } f ...
- VirtualBox中的虚拟机在Ubuntu 下无法启动之问题解决
我通过重新安装box解决的.发现,box安装,直接apt install有可能会出现虚拟机无法启动的问题. 一.添加VirtualBox的源并安装5.1版本virtualbox官网:https://w ...
- Python 中 (&,|)和(and,or)之间的区别
&,|)和(and,or)是两组比较相似的运算符,用在“与”/ “或”上,在用法上有些许区别. (&,|)和(and,or)是用来比较两组变量的,格式基本上是: a & ba ...
- django的流程分析
首先实现一个前端输入网址,后端返回不同的html文件的步骤 一.配置django 1.创建工程 2.创建app 二.配置setting 1.配置templates路径 2.注释跨站请求 三.配置pro ...
- 动态输出的javascript中alert文本的换行问题
这个简单<%out.println("<script>alert('姓名:xx\\n性别:女\\n爱好:吃\\n')</script>");%> ...
- css设置超出部分文档隐藏(在table标签中不好使解决方案在下)
css设置: .text-over{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer} div设 ...
- HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署
HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...
- 用Vue-cli生成vue+webpack的项目模板怎么设置为vue1.0版本?
用Vue-cli生成vue+webpack的项目模板 $ npm install -g vue-cli $ vue init webpack my-project $ cd my-project $ ...