smack和openfire通訊的簡單例子
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領域的伺服器推送。推動就那些吧,推推拉拉的。
相關文章
- 一個簡單的netty通訊的例子Netty
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- 簡單區分WiFi通訊和WLAN通訊WiFi
- WebRTC:一個視訊聊天的簡單例子Web單例
- 簡單的Socket通訊
- socket 完成簡單的通訊
- 網路通訊2:TCP簡單通訊TCP
- 通過一個簡單的例子,瞭解 Cypress 的執行原理
- 簡單的整合 shiro + SpringMVC 例子SpringMVC
- 一個簡單的「IOC」例子
- 一段最簡單的使用socket.io進行伺服器和客戶端通訊的例子程式碼伺服器客戶端
- 簡單的區域網內通訊
- Java的Socket通訊簡單例項Java單例
- 擼一個簡單的MVVM例子MVVM
- SwiftNIO初探-簡單UDP通訊SwiftUDP
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- Matplotlib1.簡單例子單例
- 智慧家居簡單實現---使用ESP8266簡單實現和APP通訊APP
- 採用管道進行通訊的例子
- TCP和UDP實現簡單一對一通訊TCPUDP
- 一個最簡單的 Github workflow 例子Github
- 一個簡單混合協議通訊列子,物聯網和網際網路通訊。協議
- React的6種通訊方式(附帶例子)React
- c#實現最簡單的socket通訊C#
- 簡單的Java實現Netty進行通訊JavaNetty
- 一個簡單的生活例子,感受TRIZ的魅力!
- JUnit概述及一個簡單例子單例
- 一個簡單的例子瞭解async跟defer
- 一個簡單的例子教會您使用javapJava
- Spring Boot 中使用Caffeine快取的簡單例子Spring Boot快取單例
- Rust 程式設計中使用 leveldb 的簡單例子Rust程式設計單例
- 圖形介面的TCP/IP簡單通訊TCP
- 最簡單的例子瞭解js中call()、apply()、bind()的區別和聯絡JSAPP
- Vue案例引發的「巢狀元件」通訊的簡單方式Vue巢狀元件
- 簡單的c++實現訊息釋出/訂閱機制例子(成員函式被其他類掉呼叫的例子)C++函式
- spring mvc(註解)上傳檔案的簡單例子SpringMVC單例
- 超級簡單的例子說明JAVA PACKET CLASS 和變數之間的關係Java變數
- 【譯】通過例子解釋 Debounce 和 Throttle
- Python簡單實現多執行緒例子Python執行緒