首先还是下载smack,我下载的是smack_3_2_0.tar。这个包里有四个jar文件。
首先创建一个java工程。创建一个lib文件夹,把这四个jar包放到lib中,添加到编译路径中。
目录接口如下:
创建一个TestSmack.java类。具体代码如下:
java代码:
- package eoe.demo;
- 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("");
- 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);
- }
- }
总结:
这里比较关键的一句话时是pdf:buf.append("");这句话指定了这个消息是发动到那个命名空间中。
只有发送到openfire插件对应的命名空间中openfire插件才可以正确接收。
至此openfire插件和smack的通信实现算是告一段落。剩下的工作就是xml了,不用说了吧,很简单的。