假设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;
}
}
分享到:
相关推荐
1)smack api,基于smack官方javadoc制作而成,格式chm,语言english; 2)smack documentation,内容包括Overview,Getting Started Guide等等,格式chm,语言为中文(感谢fhqdddddd的奉献,本文档基于...
这个是Smack API的中文版,详细介绍了smack原理,并且有几个小例子在里面
Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档Smack中文文档
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。 附件是目前最新版本的smack库,含源码。
smack用于android移动端的开发,可以结合openfire使用,进行im通信
Smack帮助文档中文版:XMPP协议包括一个基本协议和许多可选扩充,像具有代表性的"JEP's".Smack 为核心XMPP协议提供了org.jivesoftware.smack包,为许多协议扩充提供了org.jivesoftware.smackx包.
游客与spark聊天:用的是smack+spark+openfier 本想做个web在线客服的
Smack中文API文档
smack源码
这一节中我们着力介绍如何基于asmack开发一个Android的客户端,本篇的重点在实践,讲解和原理环节,大家可以参考前面我所发布的OpenFire和Smack的相关文章。今天所讲解的文章只是 :基于Smack3.0.4+ Openfire3.10.2...
Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户. smack是一个用 java 写的...
SMACK文件传输的介绍及代码,官网源文件
smack api帮助文档官方提供的帮助工具
smack与asmack的区别(包名对比解析)
smack xmpp 3.2.2 for linux
smack源码下载,java版下载,smack源码下载
最新的 smack4.1.4 android开发demo 可以登录 已验证
smack3.3.1源码 open fire开源的聊天服务器。客户端的核心xmpp协议的操作。
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。 Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大...
Openfire+spark+smack xmpp