假设openfire是开着的,这样下面两个类才可以跑起来
(附件包含了Smack帮助文档中文版和需要的jar包)
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.packet.Presence;
public class OpenFireUser {
private XMPPConnection connection=new OpenFireConnection().getConnection();
public String serverName="@"+connection.getServiceName();
private String username = "";
private String password = "";
Roster roster ;
Presence presence = new Presence(Presence.Type.subscribe);
public OpenFireUser() {
}
public OpenFireUser(String username, String password) {
super();
this.username = username;
this.password = password;
}
public boolean create() {//创建用户
boolean b=true;
try {
connection.getAccountManager().createAccount(this.username, this.password);
} catch (Exception e) {
b=false;
}
return b;
}
public boolean create(Map m) {//创建用户
boolean b=true;
try {
connection.getAccountManager().createAccount(this.username, this.password,m);
} catch (Exception e) {
b=false;
}
return b;
}
public boolean delete() {//删除用户
boolean b=true;
try {
connection.getAccountManager().deleteAccount();
} catch (Exception e) {
b=false;
}
return b;
}
public boolean login() {//登陆
boolean b=true;
try {
connection.login(this.username, this.password);
roster = connection.getRoster();
roster.addRosterListener(new RosterListener(){//监听Roster
@Override
public void entriesAdded(Collection<String> collection) {//添加好友的时候触发
String user = "";
Iterator<String> it = collection.iterator();
if(it.hasNext()){
user=it.next()+serverName;
}
//订阅好友的Presence
Presence presence = new Presence(Presence.Type.subscribe);
presence.setTo(user);
//presence.setMode(Presence.Mode.available);
connection.sendPacket(presence);
}
@Override
public void entriesDeleted(Collection<String> arg0) {}
@Override
public void entriesUpdated(Collection<String> arg0) {}
@Override
public void presenceChanged(Presence p) {
//当订阅的好友presence改变的时候调用
//System.out.println("Presence changed: " + p.getFrom());
}
});
} catch (Exception e) {
b=false;
}
return b;
}
public boolean addFriends(String user) {
return addFriends(user+serverName,"");
}
public boolean addFriends(String user,String nickname) {
return addFriends(user, nickname,new String[]{"Firends"});
}
//添加一个好友,添加到Firends组上
public boolean addFriends(String user,String nickname,String[] s) {
boolean b=true;
roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);
try {
roster.createEntry(user,nickname,s);
} catch (Exception e) {
b=false;
}
return b;
}
public HashMap getFriends() {//获得好友
return getFriends("");
}
public HashMap getFriends(String s) {//获得好友
HashMap hm=new HashMap();
Collection<RosterEntry> m=roster.getEntries();
for(Iterator<RosterEntry> i=m.iterator();i.hasNext();){
RosterEntry re= i.next();
System.out.println("name:"+re.getName());//打印好友信息
System.out.println("user:"+re.getUser());
}
return hm;
}
public boolean deleteFriend(String friendName){//删除某个好友
boolean b=true;
//roster=connection.getRoster();
try {
roster.removeEntry(roster.getEntry(friendName));
} catch (Exception e) {
b=false;
}
return b;
}
public void testPresences(String name){//看JID为name好友在不在线
System.out.println(roster.getPresence(name));
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static void main(String[] args) {
OpenFireUser test2=new OpenFireUser("test2","test2");
OpenFireUser test1=new OpenFireUser("test1","test1");
//ofu.create();//创建test1用户
//ofu2.create();//创建test2用户
test1.login();
test2.login();
try{
Thread.sleep(1000);
}catch (Exception e) {
// TODO: handle exception
}
System.out.println("*******************test1**********************");
//test1.addFriends("test2");//test1添加test2为好友,组为Friends
//test1.testPresences();
//test1.getFriends();//这里可以打印出好友
try{
//Thread.sleep(1000);
}catch (Exception e) {
// TODO: handle exception
}
System.out.println("*******************test2**********************");
//test2.getFriends();//这里可以打印出好友
//test2.addFriends("test1");
try{
//Thread.sleep(1000);
}catch (Exception e) {
// TODO: handle exception
}
test2.testPresences("test1@rd-test-1");//这里可以打印出好友是否在线
test1.testPresences("test2@rd-test-1");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
//这类只是连接openfire服务器,其他什么都不做
public class OpenFireConnection {
String openFireServ="localhost";//openfire服务器这是在本机上,不然就是openfire服务器的IP地址
public OpenFireConnection() {
super();
}
public OpenFireConnection(String openFireServ) {
super();
this.openFireServ = openFireServ;
}
public XMPPConnection getConnection() {
ConnectionConfiguration config = new ConnectionConfiguration(openFireServ, 5222);
XMPPConnection conn = null;
try {
conn=new XMPPConnection(config);
conn.connect();
} catch (XMPPException e) {
e.printStackTrace();
}
return conn;
}
public String getOpenFireServ() {
return openFireServ;
}
public void setOpenFireServ(String openFireServ) {
this.openFireServ = openFireServ;
}
}
分享到:
相关推荐
Openfire是另一个与Spark和Smack紧密关联的组件,它是一个用Java编写的开源XMPP服务器。Openfire提供了一个强大的后台服务,支持大规模的实时通信,包括聊天、协作和推送通知。通过Openfire,Spark客户端可以轻松地...
Smack 是一个开源的即时通讯库,主要用于实现XMPP(Extensible Messaging and Presence Protocol)协议。在Android平台上,开发者常使用Smack来构建聊天应用程序,因为它提供了丰富的API和功能,可以方便地创建...
本文将深入探讨如何使用Smack库,一个Java实现的XMPP客户端库,来连接到Openfire服务器并进行交互。Smack简化了与XMPP服务器的通信,提供了丰富的API来处理用户认证、会话管理、消息发送和接收、以及用户状态等。 ...
Smack 是一个开源的、跨平台的即时通讯(IM)库,专为实现XMPP(Extensible Messaging and Presence Protocol)协议而设计。在Smack 4.3.1版本中,开发者能够利用这个强大的框架为Android移动端构建高效、安全的聊天...
1)smack api,基于smack官方javadoc制作而成,格式chm,语言english; 2)smack documentation,内容包括Overview,Getting Started Guide等等,格式chm,语言为中文(感谢fhqdddddd的奉献,本文档基于...
10. **实战案例**:结合实际项目,如创建一个简单的聊天应用,将理论知识与实践相结合,能更好地掌握Smack的使用。 通过阅读《Smack文档中文版》,我们可以全面掌握Smack的使用,从而在XMPP平台上开发出功能丰富、...
Smack是一个开源的Java库,专门用于实现XMPP(Extensible Messaging and Presence Protocol)协议,这是一种基于XML的即时通讯协议,广泛应用于聊天、文件传输、实时通信等多种场景。在这个"smack_接收文件实例"中,...
"smack包.zip"就是这样一个工具包,它提供了在Android设备上实现XMPP(Extensible Messaging and Presence Protocol)协议的功能,从而让我们能够在基于Openfire服务器的环境中搭建起即时通讯系统。 XMPP是一种开放...
Smack是一个开源的Java库,专门用于实现XMPP(Extensible Messaging and Presence Protocol)协议,这是一种基于XML的即时通讯协议。XMPP广泛应用于聊天、协作、物联网设备通信等多个领域。在本文中,我们将深入探讨...
Openfire是一款开源的、基于XMPP(Extensible Messaging and Presence Protocol)协议的即时通讯服务器,而Smack是Java平台上的一个XMPP客户端库,用于实现与Openfire服务器的通信。 【描述】中的关键知识点包括: ...
Openfire 是一个流行的 XMPP 服务器,而 Smack 则是与 Openfire 交互的客户端库。 在 Smack 中,`XMPPConnection` 是核心类,负责建立和管理到 Openfire 服务器的连接。`ConnectionConfiguration` 类用于配置连接...
ejabberd是一个开源的XMPP服务器,它提供了稳定、安全且可扩展的服务,支持多种编程语言的客户端接口。Smack是Java和Android平台上常用的XMPP客户端库,它提供了丰富的API,使得开发者可以轻松地构建XMPP应用。 **...
Smack API 是一个开源的Java库,专门用于处理XMPP(可扩展消息处理推送协议)通信。这个API为开发者提供了一套丰富的接口和类,使得构建XMPP客户端应用程序变得简单而高效。它允许用户实现即时通讯(IM)、多用户...
Smack 3.2.2 是一个专门针对Linux平台的XMPP(Extensible Messaging and Presence Protocol)库。XMPP是一种开放标准的即时通讯协议,它允许用户进行实时、双向通信,广泛应用于聊天应用、协作工具以及物联网设备...
Smack是XMPP的一个Java实现库,它为开发者提供了简单易用的API,方便构建XMPP应用。 在"XMPP Smack java 聊天程序"这个项目中,你将学习到如何使用Smack库在Java环境中创建一个基本的聊天应用。首先,你需要理解...
Smack是一个开源的XMPP(eXtensible Messaging and Presence Protocol)库,广泛用于实现即时通讯和在线状态功能。在Android平台上,以往开发者通常需要使用Asmack,一个专门为Android优化的Smack版本,因为原版...
Smack是一个开源的XMPP(eXtensible Messaging and Presence Protocol)库,广泛用于实现即时通讯(IM)和在线状态服务。在Android平台上,开发者可以使用Smack与Openfire服务器进行交互,创建实时通信应用程序。...
Smack是一个开源的Java库,专门用于实现XMPP(可扩展消息传递和 Presence 协议),这是一种基于XML的协议,广泛用于即时通讯和在线状态管理。Smack4.1.5是该库的一个版本,提供了丰富的API来创建XMPP客户端、服务器...
Smack的目标是提供一个稳定可靠、易于使用的XMPP客户端实现,使得开发者能够快速地构建出功能强大的IM应用。 ##### 主要特点: 1. **广泛的兼容性**:Smack支持从Java SE到Android的各种Java运行环境,适用于不同的...