smack是什么?具体百度一下。我的理解也不深,我理解其实就是XMPP协议的实现。都是浮云,一切都是工具。
首先还是下载smack,我下载的是smack_3_2_0.tar。这个包里有四个jar文件。
首先创建一个java工程。创建一个lib文件夹,把这四个jar包放到lib中,添加到编译路径中。
目录接口如下:
怎么图片还还没传上来。哎。
创建一个TestSmack.java类。具体代码如下:
package org.yangzc.smack;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
public class TestSmack {
public static void main(String[] args) throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1", 5222);
XMPPConnection connection = new XMPPConnection(config);
XMPPConnection.DEBUG_ENABLED = true;
connection.connect();
connection.login("admin", "admin");
// ChatManager chatManager = connection.getChatManager();
// chatManager.addChatListener(new ChatManagerListener(){
// @Override
// public void chatCreated(Chat chat, boolean arg1) {
// chat.addMessageListener(new MessageListener(){
// @Override
// public void processMessage(Chat arg0, Message arg1) {
// System.out.println(arg1.getBody());
// }
// });
//
// }
// });
connection.addPacketListener(new PacketListener(){
@Override
public void processPacket(Packet arg0) {
System.out.println(arg0);
}
}, new PacketFilter(){
@Override
public boolean accept(Packet arg0) {
return true;
}
});
IQ iq = new IQ(){
@Override
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("<query xmlns=\"com:im:group\"/>");
return buf.toString();
}
};
connection.sendPacket(iq);
// Chat chat = chatManager.createChat("yangzc", new MessageListener(){
// @Override
// public void processMessage(Chat arg0, Message arg1) {
// System.out.println(arg1.getBody());
// }
// });
// chat.sendMessage("hello World!!!");
// BufferedReader cmdIn = new BufferedReader(new InputStreamReader(System.in));
// for(;;) {
// try {
// String cmd = cmdIn.readLine();
// if("!q".equalsIgnoreCase(cmd)) {
// break;
// }
// chat.sendMessage(cmd);
// }catch(Exception ex) {
// }
// }
connection.disconnect();
System.exit(0);
}
}
测试:启动openfire服务端,添加插件到openfire中。运行这个例子。可以看到,smack和openfire的插件通信成功。
总结:
这里比较关键的一句话时是:buf.append("<query xmlns=\"com:im:group\"/>");这句话指定了这个消息是发动到那个命名空间中。
只有发送到openfire插件对应的命名空间中openfire插件才可以正确接收。
当初在这里费了好大的功夫。至此openfire插件和smack的通信实现算是告一段落。剩下的工作就是xml了,不用说了吧,很简单的。
明天写什么呢?应该在研究一下androidpn。简单看了一眼,好像是android领域的服务器推送。推动就那些吧,推推拉拉的。
- 大小: 11.8 KB
分享到:
相关推荐
Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfire。
spark_smack_openfire_讲解
搭建openfire后,用 smack api 连接服务的测试demo。运行官网范例,发现其实不易,smack4.1.4中缺少很多依赖于第3方的jar包。不断debug甚是痛苦,终于跑起来了。分享出来给只是想要个初体验的同学。
利用smack对xmpp协议的封装,对openfire服务器进行高效简单的连接
websocket+smack+openfire的的lib,亲自有效,为什么一定要资源分呢?
websocket+smack+openfire的的源代码,亲自有效,为什么一定要资源分呢? websocket+smack+openfire的的源代码,亲自有效,为什么一定要资源分呢?
java+smack+openfire实现即时通讯的相关jar包下载,java+smack+openfire实现即时通讯的相关jar包下载,所用环境JDK8
Smack访问Openfire服务器的调用
Android端Smack对Openfire的访问
个人总结的IM(Spark+Smack+Openfire)开发资料详细说明文档,非常详细的文档,说明每个包有什么用的,每个包的说明
Openfire+spark+smack xmpp
jxmpp-core-0.5.0-alpha7 jxmpp-util-cache-0.5.0-alpha7 smack-android-4.1.6 smack-core-4.1.6 smack-extensions-4.1.6 smack-im-4.1.6 smack-sasl-provided-4.1.6 smack-tcp-4.1.6
进行实时的与用户进行线上聊天,可以添加好友,注册用户信息以及语音聊天,发送文件等相关信息
XMPP+Openfire4.5.1+Smack4.3.4+MySql,支持手机对手机,手机对PC(Spark)的消息收发
基于OpenFire3.10.3+Smack3.0.4,讲解IM(即时通讯)用户的相关操作:用户的登入、注册、注销、添加分组、删除分组、添加用户到指定分组、添加用户无指定分组、、查询用户信息、更改用户头像等基本操作,代码会一...
openfire xmpp spark基本学习 openfire xmpp spark基本学习
Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.zip