openfire+spark+smack實現即時通信

1.openfire是什麼?
openfire是一個即時通信服務器,也稱之爲即時通信平臺。它是基於XMPP協議的,你們所熟悉的通信軟件QQ、MSN和Gtalk等等,其中Gtalk就是基於XMPP協議的實現。
在即時通信中每每由於須要保存一些狀態或者數據因此不能採用點對點通信,而是須要搭建服務器來轉發。
下載地址: http://www.igniterealtime.org/downloads/index.jsp
下載完畢之後根據提示安裝、配置,而後訪問所配置的服務器地址上的9090端口便可訪問官方爲咱們實現好了的openfire後臺管理系統。

2.spark是什麼?
spark從本質上來講就是一個運行在PC上的java程序,你能夠當作是官方爲咱們實現好的運行在PC上的客戶端,咱們只須要下載使用便可。
(固然若是你項目的需求現有的spark沒法知足,你能夠選擇在官方下載spark的源碼,對它進行修改)
下載地址: http://www.igniterealtime.org/downloads/index.jsp

3.smack是什麼?
smack你能夠當作是一套封裝好了的用於實現XMPP協議傳輸的API,它是一個很是簡單而且功能強大的類庫,給用戶發送消息只須要三行代碼。
下載地址: http://www.igniterealtime.org/downloads/index.jsp
這裏須要強調一點,咱們在android上開發用的實際上是移植版的類庫asmack,而asmack如今在網上流傳的版本是有BUG的,在傳輸文件的時候會報空指針異常。我在這個問題上也是耗時最多的,在網上找了許多網友修改過的版本,都不頂用,最後也是在eoe論壇中找到了靠譜的asmack修訂版:
詳見: http://www.eoeandroid.com/thread-186418-1-1.html

好了,讀到這裏,相信你對這套實現思路的一些基本概念已經清楚了,那麼請準備好上面的三板斧,下面就開始寫代碼吧。

文字通信的重要代碼片斷:(請注意更換你本身的服務器地址、用戶名和密碼以及想要訪問的用戶名)php


                                                // 鏈接參數
                                             ConnectionConfiguration connConfig = new ConnectionConfiguration("192.168.0.1", 5222);
                                             connConfig.setReconnectionAllowed(true);
                                             connConfig.setSecurityMode(SecurityMode.disabled); // SecurityMode.required/disabled
                                             connConfig.setSASLAuthenticationEnabled(false); // true/false
                                             connConfig.setCompressionEnabled(false);
                                             // 配置服務器
                                             XMPPConnection connection = new XMPPConnection(connConfig);
                                                
                                                try {
                                                      // 鏈接服務器
                                                      connection.connect();
                                                      // 用戶登陸
                                                      connection.login("joe", "123456");
                                                        // 向另外一個用戶發出聊天
                                                        Chat chat = connection.getChatManager().createChat("admin@192.168.0.1/Spark 2.6.3", new MessageListener() {
                                                                // 消息回覆函數
                                                                @Override
                                                                public void processMessage(Chat arg0, Message arg1) {
                                                                        
                                                                        System.out.println("Received message: " + arg1.getBody());

                                                                        try
                                                                        {
                                                                                arg0.sendMessage("我已收到");
                                                                        } catch (XMPPException e)
                                                                        {
                                                                                e.printStackTrace();
                                                                        }
                                                                        
                                                                }
                                                        });
                                                        // 發送聊天信息
                                                        chat.sendMessage("Hello!");

文件傳輸的重要代碼片斷:(請注意更換你本身的服務器地址、用戶名和密碼以及想要訪問的用戶名)

                                                // 鏈接參數
                                                ConnectionConfiguration connConfig = new ConnectionConfiguration("192.168.0.1", 5222);
                                                connConfig.setReconnectionAllowed(true);
                                                connConfig.setSecurityMode(SecurityMode.disabled); // SecurityMode.required/disabled
                                                connConfig.setSASLAuthenticationEnabled(false); // true/false
                                                connConfig.setCompressionEnabled(false);
                                                // 配置服務器
                                                XMPPConnection connection = new XMPPConnection(connConfig);

                                                try {
                                                        // 鏈接服務器
                                                        connection.connect();
                                                        // 用戶登陸
                                                        connection.login("joe", "123456");
                                                        // 準備發送的文件
                                                        File file = new File(PATH);

                                                        FileTransferManager transferManager = new FileTransferManager(
                                                                        connection);
                                                        OutgoingFileTransfer outgoingFileTransfer = transferManager
                                                                        .createOutgoingFileTransfer("admin@192.168.0.1/Spark 2.6.3");
                                                        // 發送文件
                                                        outgoingFileTransfer.sendFile(file, file.getName());

                                                        // 接收文件監聽
                                                        transferManager
                                                                        .addFileTransferListener(new FileTransferListener() {

                                                                                public void fileTransferRequest(
                                                                                                FileTransferRequest request) {
                                                                                        try {
                                                                                                // 接收文件
                                                                                                IncomingFileTransfer transfer = request
                                                                                                                .accept();
                                                                                                // 接收文件存放的位置
                                                                                                transfer.recieveFile(new File(PATH));

                                                                                        } catch (Exception e) {
                                                                                                Log.e("RecFile Ex In!",
                                                                                                                e.getMessage());
                                                                                        }
                                                                                }
                                                                        });

                                                } catch (XMPPException e) {
                                                        e.printStackTrace();
                                                }

                                        }

OK,大功告成。


轉自:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=282925&extra=page%3D1&page=1html

相關文章
相關標籤/搜索