找了一些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消息发送的更多相关文章

  1. 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*;   ...

  2. openfire自定义发送消息

    加入以下类: 这个是xml格式的,解析时可以将xml转成map,参数可自由定义 import org.jivesoftware.smack.packet.PacketExtension; /** * ...

  3. openfire消息通知推送

    package cn.zsmy.utils.openfire; import java.io.BufferedReader; import java.io.InputStreamReader; imp ...

  4. C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

    我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...

  5. [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作

    这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...

  6. Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件

    引言 分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦.现在开源的消息中间件有很多,前段时间我们自家的产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注. ...

  7. iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...

  8. activemq安装与简单消息发送接收实例

    安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...

  9. eBay 消息发送(2)

      1.简介 Call Index Doc: http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/index.html   消息发送主要 ...

随机推荐

  1. Android自定义实现微信标题栏

    Android自定义实现微信标题栏     前言:在android的开发中有时我们需要更个性化的标题栏,而不仅仅是系统预定义的图标加软件名,同时有时候我们需要在标题栏中实现更多功能,如添加按钮响应用户 ...

  2. toString方法的用法

    public class JLDtoS {   public static void main(String[]args)   {    long a=123;    Long aa=new Long ...

  3. for循环语句输出菱形

    for(int a = 5; a > 0 ; a--){ for(int b = 1; b <= a; b++){ System.out.print(" "); } f ...

  4. VirtualBox中的虚拟机在Ubuntu 下无法启动之问题解决

    我通过重新安装box解决的.发现,box安装,直接apt install有可能会出现虚拟机无法启动的问题. 一.添加VirtualBox的源并安装5.1版本virtualbox官网:https://w ...

  5. Python 中 (&,|)和(and,or)之间的区别

    &,|)和(and,or)是两组比较相似的运算符,用在“与”/ “或”上,在用法上有些许区别. (&,|)和(and,or)是用来比较两组变量的,格式基本上是: a & ba ...

  6. django的流程分析

    首先实现一个前端输入网址,后端返回不同的html文件的步骤 一.配置django 1.创建工程 2.创建app 二.配置setting 1.配置templates路径 2.注释跨站请求 三.配置pro ...

  7. 动态输出的javascript中alert文本的换行问题

    这个简单<%out.println("<script>alert('姓名:xx\\n性别:女\\n爱好:吃\\n')</script>");%> ...

  8. css设置超出部分文档隐藏(在table标签中不好使解决方案在下)

    css设置: .text-over{overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer} div设 ...

  9. HHvm建站环境搭建方法:Nginx,Mariadb,hhvm及lnmp/lamp安装部署

    HHVM起源于Facebook公司,是一个开源的PHP虚拟机,使用JIT的编译方式以及其他技术,让PHP代码的执行性能大幅提升.HHVM提升PHP性能的途径,采用的方式就是替代Zend引擎来生成和执行 ...

  10. 用Vue-cli生成vue+webpack的项目模板怎么设置为vue1.0版本?

    用Vue-cli生成vue+webpack的项目模板 $ npm install -g vue-cli $ vue init webpack my-project $ cd my-project $ ...