1. 程式人生 > >安卓中使用WebSocket建立簡單實用的長連線

安卓中使用WebSocket建立簡單實用的長連線

新手!新手!大家讓一讓啊,讓一讓!冒犯了各路大神請見諒,哈哈!
對於新手,再直的路上都會拐幾個彎。咬著牙,就是向前走!當你回頭,來時的路一馬平川(裝X有點過了,我也還是個新手尼,直接進入正題了)。
Web似乎跟安卓沒有半毛錢關係的,我也是這麼想的啊,可是最近寫的專案中就是要用WebSocket協議,你說咋怎?一個戰隊都是新手,哎!只能認了。咬著牙,就是向前走。百度一下網上大神的程式碼琳琅滿目,眼花繚亂。大神級程式碼當然是有結構,有邏輯,有思想,有層次。現在我也只能瞻仰,學習。我實在寫不出來!
下面寫個簡單的,直接用的!對於新手還是可以學習下,至於大神要有興趣,就給小弟指點指點錯誤。
WebSocket協議的Url是以***ws://...***開始的,對協議分不清楚的新手可以自行百度啊,擼上主要功能程式碼:
首先匯入jar包,Java-WebSocket-1.3.1-SNAPSHOT.jar,原生的WeSocket也是OK的,

public class MainActivity extends Activity {
private WebSocketClient webc;
private Draft connDraft=new Draft_17();// 連線協議
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListener();
}

/**建立長連線*/
private void setListener() {
    bt1.setOnClickListener(new OnClickListener() {      
        @Override
        public void onClick(View v) {
            try {
                initClient();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    /**關閉長連線*/
    bt2.setOnClickListener(new OnClickListener() {      
        @Override
        public void onClick(View v) {
            webc.close();

        }
    });
    /**傳送訊息到伺服器*/
    bt3.setOnClickListener(new OnClickListener() {      
        @Override
        public void onClick(View v) {
            //連線成功後給伺服器傳送訊息
            webc.send("hello word");            
        }
    });
}


private void initClient() throws Exception {
        //每次重連都要初始化,不然連線報錯
       webc=new WebSocketClient(new URI("ws://Url"),connDraft) {        
        @Override
        public void onOpen(ServerHandshake arg0) {
            //連線成功執行的方法         
        }

        @Override
        public void onMessage(String message) {
            //伺服器推送的資料
            //可以發廣播,或訊息,到你要的地方
        }

        @Override
        public void onError(Exception error) {
            //連線伺服器異常執行這裡               
        }   
        @Override
        public void onClose(int code,String reason, boolean remote) {
            //連線斷開執行的方法
        }
    };
    webc.connect();
}

“`
是不是很簡單,很簡單,當然如果你要更進一步,這遠遠不夠。建議:長連線最好是建立在服務中,這樣不容易被幹掉。當然還是要根據你的實際需求。這裡還有個Bug:在onMessage()接收大點資料時會有收不到的情況,感興趣的可以研究研究啊,不過對於只收發訊息的還是搓搓有餘,( 網上也有大神們自己寫的java類庫,用起來無鴨梨);廢話也不多說了,趕緊去驗證下吧!