smack前端怎么smack 自定义iq发送presence信息

1598人阅读
Xmpp(53)
OpenFire(52)
Smack(30)
使用之前先下载Smack,然后把Smack开发的jar引入到项目中。
package com.bis.smack.
import java.util.C
import org.jivesoftware.smack.C
import org.jivesoftware.smack.C
import org.jivesoftware.smack.ConnectionC
import org.jivesoftware.smack.MessageL
import org.jivesoftware.smack.PacketL
import org.jivesoftware.smack.R
import org.jivesoftware.smack.RosterE
import org.jivesoftware.smack.XMPPC
import org.jivesoftware.smack.XMPPE
import org.jivesoftware.smack.packet.M
import org.jivesoftware.smack.packet.P
import org.jivesoftware.smack.packet.PacketE
import org.jivesoftware.smack.packet.P
import org.jivesoftware.smackx.ChatS
import org.jivesoftware.smackx.muc.InvitationL
import org.jivesoftware.smackx.muc.MultiUserC
import org.jivesoftware.smackx.packet.ChatStateE
import org.junit.T
public class SmackDemos {
private static XMPPConnection connection = new XMPPConnection(&wang-think&);
private static String USRE_NAME = &majian&;
private static String PASSWORD = &majian&;
connection.connect();
connection.login(USRE_NAME,PASSWORD);
} catch (Exception e) {
e.printStackTrace();
*创建连接接收消息
public void testRecieveMessage()throws Exception{
//创建一个聊天对话,接收m用户的消息 ,并发送消息给m用户
//其中m@wang-think,m是指m用户名,wang-think是指m所登陆的机器---jid
Chat chat = connection.getChatManager().createChat(&m@wang-think&,
new MessageListener() {
public void processMessage(Chat arg0, Message message) {
System.out.println(&Received message: &+ message.getBody());
Message msg = new Message();
chat.sendMessage(&Howdy!&);
while(true);//死循环,保持连接不被中断
public void testConnectionManager()throws Exception{
ConnectionConfiguration config = new ConnectionConfiguration(&wang-think&);
config.setCompressionEnabled(true);
config.setSASLAuthenticationEnabled(true);
connection = new XMPPConnection(config);
connection.connect();
connection.login(&majian&, &majian&, &SomeResource&);
// Disconnect from the server
//connection.disconnect();
while(true);
* 获取好友列表
public void testLoadRoster()throws Exception{
Roster roster = connection.getRoster();
Collection&RosterEntry& entries = roster.getEntries();
for (RosterEntry entry : entries) {
System.out.println(entry);
public void testSendMessage()throws Exception{
// XMPPConnection.DEBUG_ENABLED =
// 创建一个和m的对话,并设置信息监听
Chat mychat = connection.getChatManager().createChat(&m@wang-think&,
new MessageListener() {
public void processMessage(Chat arg0, Message message) {
String messageBody = message.getBody();
System.out.println(&收到信息:& + messageBody);
// 发送给m文本信息
mychat.sendMessage(&hello&);
// 退出登陆
while(true);
*设置自己的登陆状态
public void testSeetOwnState()throws Exception{
// XMPPConnection.DEBUG_ENABLED =
// 设置服务器地址
// 设置登陆后的个人状态信息
Presence p = new Presence(Presence.Type.available);
p.setStatus(&无聊中。。。&);
connection.sendPacket(p);
while (true);
// 退出登陆
// conn.disconnect();
* 聊天窗口输入状态,使用XEP-0085
public void testTalkState()throws Exception{
Message mess = new
Message();
mess.addExtension(new
mess.setBody(&这是测试数据&);
Chat mychat = connection.getChatManager().createChat(&m@wang-think&,
new MessageListener() {
public void processMessage(Chat arg0, Message message) {
String messageBody = message.getBody();
System.out.println(&收到信息:& + messageBody);
// 发送给m文本信息
mychat.sendMessage(mess);
// 退出登陆
while(true);
*聊天窗口输入状态,接收端处理逻辑
public void testTalkStateRecieveClient()throws Exception{
// 创建一个和test1的对话,并设置信息监听
Chat mychat = connection.getChatManager().createChat(&m@wang-think&,
new MessageListener() {
public void processMessage(Chat arg0, Message message) {
String messageBody = message.getBody();
pe = message.getExtension(&composing& , &http://jabber.org/protocol/chatstates& );
System.out.println(&对方正在输入......& );
pe = message.getExtension(&active& , &http://jabber.org/protocol/chatstates& );
System.out.println(&接收到信息:& +messageBody);
pe = message.getExtension(&paused& , &http://jabber.org/protocol/chatstates& );
System.out.println(&对方已暂停输入& );
pe = message.getExtension(&inactive& , &http://jabber.org/protocol/chatstates& );
System.out.println(&对方聊天窗口失去焦点& );
pe = message.getExtension(&gone& , &http://jabber.org/protocol/chatstates& );
System.out.println(&对方聊天窗口被关闭& );
// 发送给test1文本信息
mychat.sendMessage(&hello&);
*接收邀请,加入多人聊天房间
public void testYaoQingSevralUserTalk()throws Exception{
MultiUserChat.addInvitationListener(connection, new
InvitationListener() {
public void invitationReceived(Connection conn, String room,
String inviter, String reason, String password, Message message) {
MultiUserChat multiUserChat = new
MultiUserChat(conn, room);
System.out.println(&收到来自 & +inviter+ & 的聊天室邀请。邀请附带内容:& +reason);
multiUserChat.join(&test2& , password);
(XMPPException e) {
System.out.println(&加入聊天室失败& );
e.printStackTrace();
System.out.println(&成功加入聊天室& );
multiUserChat.addMessageListener(new
PacketListener() {
processPacket(Packet packet) {
Message message = (Message)
//接收来自聊天室的聊天信息
System.out.println(message.getFrom()+&:& +message.getBody());
//发送信息到聊天室
multiUserChat.sendMessage(&新手到来,大家关照!&);
} catch (XMPPException e) {
e.printStackTrace();
while(true);
* 登陆GTalk用户,并查询该用户的所有好友列表
public void testLogOnGtalk()throws Exception{
XMPPConnection conn = new
XMPPConnection( new
ConnectionConfiguration( && ,
conn.connect();
//输入gtalk的账号密码
conn.login(&& ,
Collection&RosterEntry& rosters = conn.getRoster().getEntries();
//获取gtalk上的好友列表
System.out.println(&我的好友列表:=======================& );
for (RosterEntry rosterEntry : rosters){
System.out.print(&name: & +rosterEntry.getName()+ &,jid: & +rosterEntry.getUser());
System.out.println(&& );
System.out.println(&我的好友列表:=======================& );
conn.disconnect();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1109671次
积分:11875
积分:11875
排名:第780名
原创:146篇
转载:385篇
评论:158条
(3)(1)(7)(10)(5)(6)(4)(1)(3)(2)(22)(1)(1)(4)(5)(1)(4)(1)(1)(4)(23)(7)(3)(1)(10)(18)(35)(55)(39)(25)(53)(38)(33)(40)(2)(19)(41)(4)24811人阅读
01-Java笔记(7)
临毕业前,应需求,花了三天写了个小的聊天工具,貌似简陋得很&.若有机会再完善吧,目前毕业季,处理毕业事宜,还要准备即将的入职。
眼瞅着大学四年就这么结束了,哎。
开始吧,四篇博文简单介绍下基本实现,由于时间有限,功能不是十分丰富,有兴趣的同学自己研究下协议和具体的实现
基于XMPP的IM工具,需实现和gtalk实现通信,需实现同spark的通信,需架设服务器,实现同自身客户端的通信,传文件,视频聊天
写完未实现需要改进的地方:离线消息,离线文件
XMPP : The Extensible Messaging and Presence Protocol
中文全称:可扩展通讯和表示协议
可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求 - 响应服务中的 XML 数据元流式传输。XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。
&& &Smack是一个开源,易于使用的XMPP(jabber)客户端类库。
  &Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.
smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心.
二、连接及断开
&XMPPConnection connection = new XMPPConnection("");
&&&&&&& connection.connect();
实现的方法
public static XMPPConnection getConnection(String domain) throws XMPPException {
XMPPConnection connection = new XMPPConnection(domain);
connection.connect();
public static XMPPConnection getConnection(String domain,int port) throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration(domain,port);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();
&&& &connection.disconnect();
connection.login("javatest2011@", "*****");
五、账户操作
&& 可以对账户进行基本操作,包括注册,注销,修改密码
* 注册用户
* @param connection
* @param regUserName
* @param regUserPwd
public static boolean createAccount(XMPPConnection connection,String regUserName,String regUserPwd)
connection.getAccountManager().createAccount(regUserName, regUserPwd);
} catch (Exception e) {
* 删除当前用户
* @param connection
public static boolean deleteAccount(XMPPConnection connection)
connection.getAccountManager().deleteAccount();
} catch (Exception e) {
* 删除修改密码
* @param connection
public static boolean changePassword(XMPPConnection connection,String pwd)
connection.getAccountManager().changePassword(pwd);
} catch (Exception e) {
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1203936次
积分:11330
积分:11330
排名:第851名
原创:116篇
评论:328条
文章:14篇
阅读:125266
文章:10篇
阅读:33435
文章:18篇
阅读:174715
后续博客都在新地址
blog: http://wklken.me/
邮箱:wklken#yeah.net
微博:凌岳_wkl
My github:
(2)(1)(1)(8)(1)(1)(1)(1)(3)(2)(3)(2)(5)(16)(1)(7)(6)(1)(3)(3)(2)(2)(3)(15)(6)(20)openfire smack消息回执设置,处理掉包问题
openfire smack消息回执设置,处理掉包问题
package&com.penngo.import&java.awt.EventQpublic&class&ReceiptDialog&extends&JDialog&{&&&&private&JTextField&textF&&&&/**&&&&&*&Launch&the&application.&&&&&*/&&&&public&static&void&main(String[]&args)&{&&&&&&&&EventQueue.invokeLater(new&Runnable()&{&&&&&&&&&&&&public&void&run()&{&&&&&&&&&&&&&&&&try&{&&&&&&&&&&&&&&&&&&&&ReceiptDialog&dialog&=&new&ReceiptDialog();&&&&&&&&&&&&&&&&&&&&dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);&&&&&&&&&&&&&&&&&&&&dialog.setVisible(true);&&&&&&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&});&&&&}&&&&/**&&&&&*&Create&the&dialog.&&&&&*/&&&&public&ReceiptDialog()&throws&Exception{&&&&&&&&setBounds(100,&100,&450,&300);&&&&&&&&getContentPane().setLayout(null);&&&&&&&&&&&&&&&&&textField&=&new&JTextField();&&&&&&&&textField.setBounds(20,&20,&301,&22);&&&&&&&&getContentPane().add(textField);&&&&&&&&textField.setColumns(10);&&&&&&&&&&&&&&&&&Connection.DEBUG_ENABLED&=&true;&&//&打开smack&debug&&&&&&&&&&&&&&&&&ConnectionConfiguration&config&=&new&ConnectionConfiguration("127.0.0.1",&5222);//52222&&&&&&&&config.setSendPresence(true);&&&&&&&&final&Connection&connection&=&new&XMPPConnection(config);&&&&&&&&&&&&&&&&&//&自动回复回执方法,如果对方的消息要求回执。&&&&&&&&ProviderManager&pm&=&ProviderManager.getInstance();&&&&&&&&pm.addExtensionProvider(DeliveryReceipt.ELEMENT,&DeliveryReceipt.NAMESPACE,&new&DeliveryReceipt.Provider());&&&&&&&&&pm.addExtensionProvider(DeliveryReceiptRequest.ELEMENT,&DeliveryReceipt.NAMESPACE,&new&DeliveryReceiptRequest.Provider());&&&&&&&&DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();&&&&&&&&&//&&&&& 非自动回复回执方法//&&&&& connection.addPacketListener(new&PacketListener()&{//&&&&&&&&& public&void&processPacket(Packet&packet)&{//&&&&&&&&&&&&& //&监听消息,在检查到对方要求回执时,客户端手动发送回执给对方//&&&&&&&&&&&&& if(packet&instanceof&Message){//&&&&&&&&&&&&&&&&& Message&message&=&(Message)//&&&&&&&&&&&&&&&&& PacketExtension&receipt&=&message.getExtension(DeliveryReceiptRequest.ELEMENT,&DeliveryReceipt.NAMESPACE);//&&&&&&&&&&&&&&&&& if(receipt&!=&null){//&&&&&&&&&&&&&&&&&&&&& Message&receiptMessage&=&new&Message();//&&&&&&&&&&&&&&&&&&&&& receiptMessage.setTo(message.getFrom());//&&&&&&&&&&&&&&&&&&&&& receiptMessage.setFrom(message.getTo());//&&&&&&&&&&&&&&&&&&&&& receiptMessage.addExtension(new&DeliveryReceipt(message.getPacketID()));//&&&&&&&&&&&&&&&&&&&&& connection.sendPacket(receiptMessage);//&&&&&&&&&&&&&&&&& }//&&&&&&&&&&&&& }//&&&&&&&&& }//&&&&& },&new&PacketFilter()&{//&&&&&&&&& public&boolean&accept(Packet&packet)&{//&&&&&&&&&&&&& return&//&&&&&&&&& }//&&&&& });&&&&&&&&&&&&&&&&&connection.connect();&&&&&&&&String&domain&=&connection.getServiceName();&&&&&&&&//&test1登录,发送消息给test2//&&&&& String&from&=&"test1";//&&&&& final&String&to&=&"test2"&+&"@"&+&&&&&&&&&&&&&&&&&&//test2登录,发送消息给test1&&&&&&&&String&from&=&"test2";&&&&&&&&final&String&to&=&"test1"&+&"@"&+&&&&&&&&&&&&&&&&&&connection.login(from,&"123456",&"pc");//&&&&& Presence&p&=&new&Presence(Presence.Type.available);//&&&&& p.setMode(Mode.chat);//&&&&& p.setStatus("在线");//&&&&& connection.sendPacket(p);&&&&&&&&final&Chat&chat&=&connection.getChatManager().createChat(to,&null);&&&&&&&&&&&&&&&&&JButton&sendButton&=&new&JButton("发送");&&&&&&&&sendButton.addActionListener(new&ActionListener()&{&&&&&&&&&&&&public&void&actionPerformed(ActionEvent&e)&{&&&&&&&&&&&&&&&&Message&message&=&new&Message();&&&&&&&&&&&&&&&&message.setFrom(connection.getUser());&&&&&&&&&&&&&&&&message.setTo(to);&&&&&&&&&&&&&&&&message.setBody(textField.getText());&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&添加回执请求&&&&&&&&&&&&&&&&DeliveryReceiptManager.addDeliveryReceiptRequest(message);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//也可以这样添加回执请求&&&&&&&&&&&&&&&&//DeliveryReceiptRequest&deliveryReceiptRequest&=&new&DeliveryReceiptRequest();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//message.addExtension(new&DeliveryReceiptRequest());&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.println("发送======="&+&message.toXML());&&&&&&&&&&&&&&&&try{&&&&&&&&&&&&&&&&&&&&chat.sendMessage(message);&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&catch(Exception&ex){&&&&&&&&&&&&&&&&&&&&ex.printStackTrace();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&});&&&&&&&&sendButton.setBounds(331,&19,&93,&23);&&&&&&&&getContentPane().add(sendButton);&&&&}}
发表评论:
TA的最新馆藏Java(107)
/hoojo/archive//2561576.html
在文章开始,请你了解和熟悉openfire方面的相关知识,这样对你理解下面代码以及下面代码的用途有很好的了解。同时,你可能需要安装一个简单的CS聊天工具,来测试你的代码是否成功的在openfire服务器上建立会话链接,并成功的向在线用户发送聊天消息。
必须了解:
(非windows 系统)
,用于测试聊天消息发送是否成功,下载地址:
然后你需要添加smack相关的jar包
smackx.jar
jar包下载地址:
代码中还用到了junit,junit jar下载地址:
下面开始代码部分
package com.hoo.
import java.util.C
import java.util.I
import javax.net.SocketF
import org.jivesoftware.smack.AccountM
import org.jivesoftware.smack.C
import org.jivesoftware.smack.ChatM
import org.jivesoftware.smack.C
import org.jivesoftware.smack.ConnectionC
import org.jivesoftware.smack.MessageL
import org.jivesoftware.smack.R
import org.jivesoftware.smack.RosterE
import org.jivesoftware.smack.XMPPC
import org.jivesoftware.smack.XMPPE
import org.jivesoftware.smack.packet.M
import org.jivesoftware.smack.packet.P
import org.jivesoftware.smack.packet.S
import org.jivesoftware.smack.packet.Message.T
import org.junit.A
import org.junit.B
import org.junit.T
* &b&function:&/b& 利用Smack框架完成 XMPP 协议通信
* @author hoojo
* @createDate
上午10:28:18
* @file ConnectionServerTest.java
* @package com.hoo.smack.conn
* @project jwchat
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@
* @version 1.0
public class SmackXMPPTest {
private ConnectionC
/** openfire服务器address */
private final static String server = &192.168.8.32&;
private final void fail(Object o) {
if (o != null) {
System.out.println(o);
private final void fail(Object o, Object... args) {
if (o != null && args != null && args.length & 0) {
String s = o.toString();
for (int i = 0; i & args. i++) {
String item = args[i] == null ? && : args[i].toString();
if (s.contains(&{& + i + &}&)) {
s = s.replace(&{& + i + &}&, item);
s += & & +
System.out.println(s);
* &b&function:&/b& 初始Smack对openfire服务器链接的基本配置
* @author hoojo
* @createDate
下午04:06:42
public void init() {
//connection = new XMPPConnection(server);
//connection.connect();
/** 5222是openfire服务器默认的通信端口,你可以登录http://192.168.8.32:9090/到管理员控制台查看客户端到服务器端口 */
config = new ConnectionConfiguration(server, 5222);
/** 是否启用压缩 */
config.setCompressionEnabled(true);
/** 是否启用安全验证 */
config.setSASLAuthenticationEnabled(true);
/** 是否启用调试 */
config.setDebuggerEnabled(false);
//config.setReconnectionAllowed(true);
//config.setRosterLoadedAtLogin(true);
/** 创建connection链接 */
connection = new XMPPConnection(config);
/** 建立连接 */
connection.connect();
} catch (XMPPException e) {
e.printStackTrace();
fail(connection);
fail(connection.getConnectionID());
public void destory() {
if (connection != null) {
connection.disconnect();
connection =
* &b&function:&/b& ConnectionConfiguration 的基本配置相关信息
* @author hoojo
* @createDate
下午04:11:25
public void testConfig() {
fail(&PKCS11Library: & + config.getPKCS11Library());
fail(&ServiceName: {0}&, config.getServiceName());
// ssl证书密码
fail(&TruststorePassword: {0}&, config.getTruststorePassword());
fail(&TruststorePath: {0}&, config.getTruststorePath());
fail(&TruststoreType: {0}&, config.getTruststoreType());
SocketFactory socketFactory = config.getSocketFactory();
fail(&SocketFactory: {0}&, socketFactory);
fail(&createSocket: {0}&, socketFactory.createSocket(&localhost&, 3333));
} catch (IOException e) {
e.printStackTrace();
* &b&function:&/b& Connection 基本方法信息
* @author hoojo
* @createDate
下午04:12:04
public void testConnection() {
/** 用户管理 */
AccountManager accountManager = connection.getAccountManager();
for (String attr : accountManager.getAccountAttributes()) {
fail(&AccountAttribute: {0}&, attr);
fail(&AccountInstructions: {0}&, accountManager.getAccountInstructions());
/** 是否链接 */
fail(&isConnected:&, connection.isConnected());
fail(&isAnonymous:&, connection.isAnonymous());
/** 是否有权限 */
fail(&isAuthenticated:&, connection.isAuthenticated());
fail(&isSecureConnection:&, connection.isSecureConnection());
/** 是否使用压缩 */
fail(&isUsingCompression:&, connection.isUsingCompression());
* &b&function:&/b& 用户管理器
* @author hoojo
* @createDate
下午04:22:31
public void testAccountManager() {
AccountManager accountManager = connection.getAccountManager();
for (String attr : accountManager.getAccountAttributes()) {
fail(&AccountAttribute: {0}&, attr);
fail(&AccountInstructions: {0}&, accountManager.getAccountInstructions());
fail(&supportsAccountCreation: {0}&, accountManager.supportsAccountCreation());
/** 创建一个用户boy,密码为boy;你可以在管理员控制台页面http://192.168.8.32:9090/user-summary.jsp查看用户/组的相关信息,来查看是否成功创建用户 */
accountManager.createAccount(&boy&, &boy&);
/** 修改密码 */
accountManager.changePassword(&abc&);
} catch (XMPPException e) {
e.printStackTrace();
public void testUser() {
/** 用户登陆,用户名、密码 */
connection.login(&hoojo&, &hoojo&);
} catch (XMPPException e) {
e.printStackTrace();
/** 获取当前登陆用户 */
fail(&User:&, connection.getUser());
/** 所有用户组 */
Roster roster = connection.getRoster();
/** 好友用户组,你可以用Spark添加用户好友,这样这里就可以查询到相关的数据 */
Collection&RosterEntry& rosterEntiry = roster.getEntries();
Iterator&RosterEntry& iter = rosterEntiry.iterator();
while (iter.hasNext()) {
RosterEntry entry = iter.next();
fail(&Groups: {0}, Name: {1}, Status: {2}, Type: {3}, User: {4}&, entry.getGroups(), entry.getName(), entry.getStatus(), entry.getType(), entry);
fail(&-------------------------------&);
/** 未处理、验证好友,添加过的好友,没有得到对方同意 */
Collection&RosterEntry& unfiledEntries = roster.getUnfiledEntries();
iter = unfiledEntries.iterator();
while (iter.hasNext()) {
RosterEntry entry = iter.next();
fail(&Groups: {0}, Name: {1}, Status: {2}, Type: {3}, User: {4}&, entry.getGroups(), entry.getName(), entry.getStatus(), entry.getType(), entry);
@SuppressWarnings(&static-access&)
public void testPacket() {
connection.login(&hoojo&, &hoojo&);
} catch (XMPPException e) {
e.printStackTrace();
//Packet packet = new Data(new DataPacketExtension(&jojo@& + server, 2, &this is a message&));
//connection.sendPacket(packet);
/** 更改用户状态,available=true表示在线,false表示离线,status状态签名;当你登陆后,在Spark客户端软件中就可以看到你登陆的状态 */
Presence presence = new Presence(Presence.Type.available);
presence.setStatus(&Q我吧&);
connection.sendPacket(presence);
Session session = new Session();
String sessid = session.nextID();
connection.sendPacket(session);
/** 向jojo@192.168.8.32 发送聊天消息,此时你需要用Spark软件登陆jojo这个用户,
* 这样代码就可以向jojo这个用户发送聊天消息,Spark登陆的jojo用户就可以接收到消息
/** Type.chat 表示聊天,groupchat多人聊天,error错误,headline在线用户; */
Message message = new Message(&jojo@& + server, Type.chat);
//Message message = new Message(sessid, Type.chat);
message.setBody(&h!~ jojo, I'am is hoojo!&);
connection.sendPacket(message);
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
* &b&function:&/b& 测试聊天消息管理类
* @author hoojo
* @createDate
下午05:03:23
public void testChatManager() {
/** 设置状态 */
connection.login(&hoojo&, &hoojo&);
} catch (XMPPException e) {
e.printStackTrace();
/** 设置状态 */
Presence presence = new Presence(Presence.Type.available);
presence.setStatus(&Q我吧&);
connection.sendPacket(presence);
/** 获取当前登陆用户的聊天管理器 */
ChatManager chatManager = connection.getChatManager();
/** 为指定用户创建一个chat,MyMessageListeners用于监听对方发过来的消息
Chat chat = chatManager.createChat(&jojo@& + server, new MyMessageListeners());
/** 发送消息 */
chat.sendMessage(&h!~ jojo……&);
/** 用message对象发送消息 */
Message message = new Message();
message.setBody(&message&);
message.setProperty(&color&, &red&);
chat.sendMessage(message);
} catch (XMPPException e) {
e.printStackTrace();
Thread.sleep(1000 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
* &b&function:&/b& 消息监听器,用户监听对方发送的消息,也可以想对方发送消息
* @author hoojo
* @createDate
下午05:05:31
* @file SmackXMPPTest.java
* @package com.hoo.smack
* @project jwchat
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@
* @version 1.0
class MyMessageListeners implements MessageListener {
public void processMessage(Chat chat, Message message) {
/** 发送消息 */
chat.sendMessage(&dingding……& + message.getBody());
} catch (XMPPException e) {
e.printStackTrace();
/** 接收消息 */
fail(&From: {0}, To: {1}, Type: {2}, Sub: {3}&, message.getFrom(), message.getTo(), message.getType(), message.toXML());
/*Collection&Body& bodys =
message.getBodies();
for (Body body : bodys) {
fail(&bodies[{0}]&, body.getMessage());
//fail(message.getLanguage());
//fail(message.getThread());
//fail(message.getXmlns());*/
fail(&body: &, message.getBody());
好了,这些都是smack的基本功能,还有更多的东西需要研究,下次有机会再分享!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2243852次
积分:24385
积分:24385
排名:第176名
原创:218篇
转载:939篇
译文:11篇
评论:447条
新浪微博: Android人: QQ群:
(2)(1)(2)(4)(6)(15)(3)(6)(10)(12)(1)(1)(5)(10)(4)(15)(21)(23)(27)(44)(29)(7)(16)(7)(1)(2)(15)(12)(27)(21)(39)(9)(9)(5)(15)(11)(13)(18)(26)(31)(26)(24)(36)(55)(106)(136)(38)(40)(30)(45)(10)(9)(7)(6)(3)(12)(11)(5)(10)(5)(2)(1)(4)(1)(10)(6)(1)(3)(6)(5)(1)(38)(3)(12)(2)(4)(10)(4)(1)(1)
() () () () ()

我要回帖

更多关于 smack 后台发送消息 的文章

 

随机推荐