安卓中使用WebSocket建立簡單實用的長連線
阿新 • • 發佈:2019-01-05
新手!新手!大家讓一讓啊,讓一讓!冒犯了各路大神請見諒,哈哈! 對於新手,再直的路上都會拐幾個彎。咬著牙,就是向前走!當你回頭,來時的路一馬平川(裝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類庫,用起來無鴨梨);廢話也不多說了,趕緊去驗證下吧!