`
酷的飞上天空
  • 浏览: 521798 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

smack api学习

阅读更多

smack版本3.1.0

 

===============================================================
主动发送信息给某个用户
------------------------------------
XMPPConnection.DEBUG_ENABLED = true;
//设置服务器地址
XMPPConnection conn = new XMPPConnection("127.0.0.1"); 
conn.connect();
//输入账号和密码登陆
conn.login("test2@127.0.0.1", "123456"); 
//创建一个和test1的对话,并设置信息监听
Chat mychat = conn.getManager().create("test1@127.0.0.1",
		new MessageListener() {
			@Override
			public void processMessage(Chat chat,, Message message) {
				String messageBody = message.getBody();
				System.out.println("收到信息:"+messageBody);
			}
});
//发送给test1文本信息
mychat.sendMessage("hello");
//退出登陆
conn.disconnect();
===============================================================
设置自己的登陆状态
------------------------------------
XMPPConnection.DEBUG_ENABLED = true;
//设置服务器地址
XMPPConnection conn = new XMPPConnection("127.0.0.1"); 
conn.connect();
//输入账号和密码登陆
conn.login("test2@127.0.0.1", "123456"); 

//设置登陆后的个人状态信息
Presence p = new Presence(Presence.Type.available);
p.setStatus("发呆中。。。");
conn.sendPacket(p);

//退出登陆
conn.disconnect();
==========================================================================
被动接收用户发来的信息
------------------------------------
XMPPConnection.DEBUG_ENABLED = true;
//设置服务器地址
XMPPConnection conn = new XMPPConnection("127.0.0.1"); 
conn.connect();
//输入账号和密码登陆
conn.login("test1@127.0.0.1", "123456"); 
//设置信息的监听
conn.getChatManager().addChatListener(new ChatManagerListener() {
	@Override
	public void chatCreated(Chat chat, boolean createdLocally) {
		chat.addMessageListener(new MessageListener() {
			@Override
			public void processMessage(Chat chat, Message message) {
				String messageBody = message.getBody();	
				System.out.println("接收到信息:"+messageBody);				
			}
		});
	}
});
//退出登陆
conn.disconnect();
==========================================================================
获取我的好友列表
------------------------------------
//设置服务器地址
XMPPConnection conn = new XMPPConnection("127.0.0.1"); 
conn.connect();
//输入账号和密码登陆
conn.login("test1@127.0.0.1", "123456"); 
Collection<RosterEntry> rosters = conn.getRoster().getEntries();
System.out.println("我的好友列表:=======================");
for(RosterEntry rosterEntry : rosters){
	System.out.print("name: "+rosterEntry.getName()+",jid: "+rosterEntry.getUser());
	System.out.println("");
}
System.out.println("我的好友列表:=======================");

conn.disconnect();
==========================================================================
聊天窗口输入状态,使用XEP-0085 协议
------------------------------------
//发送给test1初始文本信息,附带输入状态
Message mess = new Message();
mess.addExtension(new ChatStateExtension(ChatState.active));
mychat.sendMessage(mess);
//发送给test1初始文本信息,附带正在输入的状态
Message mess = new Message();
mess.addExtension(new ChatStateExtension(ChatState.composing));
mychat.sendMessage(mess);

//发送给test1初始文本信息,附带暂停输入的状态
Message mess = new Message();
mess.addExtension(new ChatStateExtension(ChatState.paused));
mychat.sendMessage(mess);
//其他略。。。

//接收的时候
public void processMessage(Chat chat, Message message) {
	String messageBody = message.getBody();
	PacketExtension pe;
	
	pe = message.getExtension("composing","http://jabber.org/protocol/chatstates");
	if(pe != null){
		System.out.println("对方正在输入......");
	}
	
	pe = message.getExtension("active","http://jabber.org/protocol/chatstates");
	if(pe != null){
		System.out.println("接收到信息:"+messageBody);
	}

	pe = message.getExtension("paused","http://jabber.org/protocol/chatstates");
	if(pe != null){
		System.out.println("对方已暂停输入");
	}

	pe = message.getExtension("inactive","http://jabber.org/protocol/chatstates");
	if(pe != null){
		System.out.println("对方聊天窗口失去焦点");
	}

	pe = message.getExtension("gone","http://jabber.org/protocol/chatstates");
	if(pe != null){
		System.out.println("对方聊天窗口被关闭");
	}
}
==========================================================================
接收邀请,加入多人聊天房间
------------------------------------
MultiUserChat.addInvitationListener(conn, new InvitationListener() {
	@Override
	public void invitationReceived(XMPPConnection conn, String room,
			String inviter, String reason, String password, Message message) {
		MultiUserChat multiUserChat = new MultiUserChat(conn, room);
		System.out.println("收到来自 "+inviter+" 的聊天室邀请。邀请附带内容:"+reason);
		try {
			multiUserChat.join("test2", password);
		} catch (XMPPException e) {
			System.out.println("加入聊天室失败");
			e.printStackTrace();
		}
		System.out.println("成功加入聊天室");
		multiUserChat.addMessageListener(new PacketListener() {
			@Override
			public void processPacket(Packet packet) {
				Message message = (Message)packet;
				//接收来自聊天室的聊天信息
				System.out.println(message.getFrom()+":"+message.getBody());
			}
		});
	}
	//发送信息到聊天室
	multiUserChat.sendMessage("新手到来,大家关照!");
});

==========================================================================
登陆gtalk
------------------------------------
XMPPConnection conn = new XMPPConnection(new ConnectionConfiguration("talk.google.com", 5222, "gmail.com"));
conn.connect();
//输入gtalk的账号密码
conn.login("88888888", "8888888888"); 
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();
==========================================================================

 
分享到:
评论
5 楼 wll52 2013-12-10  
package com.hoo.smack;

import java.util.Scanner;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.PacketExtension;



public class tests {

public void  says()
throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration("localhost", 5222); //新建连接配置对象,设置服务器IP和监听端口
XMPPConnection connection = new XMPPConnection(config); //得到基于xmpp协议的连接对象

try {
connection.connect();// 开启连接
} catch (XMPPException e) {
throw new IllegalStateException(e);
}
connection.loginAnonymously();


Chat chat = connection.getChatManager().createChat("gg22mm@chat.09wood.com", new MessageListener() {

public void processMessage(Chat arg0, Message arg1) {
PacketExtension pe = null;



pe = arg1.getExtension("composing","http://jabber.org/protocol/chatstates"); 
  
System.out.println(pe+"对方正在输入......"); 

if(pe != null){ 
       // System.out.println("对方正在输入......"); 
    }



System.out.println("Received from 【"
+ arg1.getFrom() + "】 message: "
+ arg1.getBody());

}

});

Scanner input = new Scanner(System.in);
while (true) {
String message = input.nextLine();
chat.sendMessage(message);
}

}
}


正在输入好象不行呢,怎么弄呢??
4 楼 kingkejava 2012-07-13  
 
请问要实现用户搜索usersearch(XEP-0055),怎么弄啊???
3 楼 酷的飞上天空 2012-05-29  
ordinary 写道
怎么给所以用户发消息呢?

XMPPServer.getInstance().getSessionManager().sendServerMessage(null, text);//广播信息  

可以先从客户端发给服务器,然后让服务器进行广播。
openfire 插件入门学习的这篇里面有介绍
http://314858770.iteye.com/blog/908249
2 楼 ordinary 2012-05-29  
怎么给所以用户发消息呢?
1 楼 biaogebest 2011-08-30  

相关推荐

    Smack API中文版

    **Smack API中文版**是针对即时通讯(Instant Messaging)领域的一个强大开发工具,它提供了丰富的API接口,便于开发者在Java环境中构建实时通信应用。Smack API与Openfire服务器配合使用,可以实现高效的、安全的...

    smack API

    通过阅读Smack的官方文档,参考示例代码,以及参与社区讨论,可以加速学习过程,更好地理解和运用这个强大的API。 总的来说,Smack API是开发XMPP应用的强大工具,它简化了与Openfire服务器的交互,让开发者能够...

    smack api帮助文档

    为了充分利用Smack API,开发者应熟悉XMPP协议,理解其工作原理,同时深入学习文档中的示例代码,以便更好地将Smack API应用到实际项目中。此外,积极参与社区讨论和跟踪最新的开发动态也是提升使用效率的有效途径。

    amsmck jar包+smack API

    这种文件通常包含API的详细说明、示例代码和类库的结构,方便开发者查阅和学习如何使用Smack API进行开发。"asmack-jse-buddycloud-2010.12.11.jar" 是另一个jar包,可能是Asmack的一个特定版本,它是Smack的增强版...

    smackAPI中文版本和英文版本,非常容易懂的

    学习Smack API 时,建议先从官方文档开始,了解基本概念和架构。然后,可以通过阅读中文版的教程和示例代码来加深理解,解决实际开发中遇到的问题。不断实践和探索,结合社区资源,将有助于你成为熟练的XMPP开发者。

    SmackAPI_CN

    **SmackAPI_CN** 是一个专门针对 Smack 开发的中文 API 文档,它旨在帮助中文用户更好地理解和使用 Smack 库来构建即时通讯(IM)系统。Smack 是一个开源的 Java 库,用于实现 XMPP(Extensible Messaging and ...

    smack3.2的api

    Smack 3.2 API 是一个用于开发XMPP(Extensible Messaging and Presence Protocol)客户端的开源库。XMPP是一种基于XML的实时通信协议,...对于进一步学习,可以参考提供的javadoc,它包含了API的详细说明和使用示例。

    Smack类库最好的学习资料

    ### Smack类库最佳学习资料概述 #### 一、Smack类库介绍及应用场景 Smack是一个用于开发基于XMPP(可扩展消息处理协议)的应用程序的Java类库。XMPP是一种基于XML的协议,主要用于即时通讯(IM)系统。Smack提供了...

    smack2.2中文API

    Smack是一个开源的Java库,专门用于实现XMPP...尽管Smack 2.2相对较旧,但对于学习XMPP基础概念和实践来说,它仍然是一个很好的起点。然而,由于安全性和功能性的提升,建议在新项目中使用更新的Smack版本,如4.x系列。

    xmpp-client:具有smack API的Java客户端

    在这个项目中,"xmpp-client"是一个使用Java语言开发的客户端,它利用了Smack API来实现与XMPP服务器的交互。Openfire是一款开源的XMPP服务器,它提供了安全、可扩展的即时通讯服务。Spark是基于Openfire的桌面...

    smack4.1.4 android 测试通过

    Smack 是一个开源的即时通讯库,主要用于实现XMPP(Extensible Messaging and Presence Protocol)协议。...开发者可以通过解压并研究这些文件,学习如何在自己的Android项目中集成和使用Smack4.1.4。

    smack文档(中文)

    **Smack文档(中文)详解** Smack是一个开源的Java库,专为实现XMPP(Extensible Messaging and Presence Protocol)协议而设计。...这份文档详尽地介绍了Smack的各个方面,是学习和开发XMPP应用的重要参考资料。

    smack android

    "javadoc"是Smack的API文档,对于开发者来说至关重要,它提供了所有类、方法和接口的详细说明,方便查阅和学习。"libs"文件夹则很可能包含了Smack 4.1的库文件,供开发者在Android项目中集成使用。 在实际开发中,...

    smack4.3.1

    在压缩包中,"releasedocs"目录包含了Smack 4.3.1的官方发布文档,这是了解和学习Smack功能和用法的重要资料。这些文档详细解释了库的架构、安装步骤、基本用法和高级特性。 "javadoc"目录下则是Smack的Java API...

    smack帮助文档

    开发者可以根据需求深入学习和利用Smack提供的各种类和接口,构建出功能丰富的即时通讯应用。由于Smack是Apache许可下的开源项目,因此它可以被自由地用于商业或非商业项目中,这为开发者提供了极大的便利和灵活性。

    Smack文档中文版

    8. **事件监听与异步编程**:Smack提供了一套事件驱动的API,允许开发者注册监听器来响应各种事件,如连接状态变化、新消息到达等。理解异步编程模式是提高应用性能的关键。 9. **错误处理与调试**:在开发过程中,...

    OpenFire+smack3.0.4 即时通讯Demo

    - **使用Smack API**:熟悉Smack提供的各种类和方法,学会创建XMPP客户端应用。 - **OpenFire服务器管理**:了解如何配置和管理OpenFire服务器,包括用户、群组和权限设置。 - **即时通讯应用设计**:学习如何设计和...

    Android使用smack连接ejabberd服务器注册、收发消息

    在Android平台上,开发即时通讯应用时,...通过深入学习Smack库的API和ejabberd服务器的配置,可以构建更复杂的IM功能,如群聊、文件传输等。文件“XmppTest”可能是该项目的测试代码,可以参考其中的具体实现细节。

    wildphone:使用 Jingle 和 Smack API 的 XMPP VoIP 应用程序

    **野电话:基于Jingle和Smack API的XMPP VoIP应用程序** 野电话是一个创新的VoIP(Voice over IP)应用程序,它利用了开放的XMPP(Extensible Messaging and Presence Protocol)协议,通过互联网实现语音通话。这...

Global site tag (gtag.js) - Google Analytics