最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android利用websocket協(xié)議與服務(wù)器通信

 更新時間:2020年04月05日 08:32:59   作者:成電小菜  
這篇文章主要為大家詳細介紹了android利用websocket協(xié)議與服務(wù)器通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

最近做一個項目,需求中需要服務(wù)器主動推送消息到客戶端。這樣的話一般的http連接就不能使用了。博主問了個朋友,向我推薦websocket協(xié)議,特此測試了一下,發(fā)現(xiàn)效果很好。

android本身沒有websocket的庫,需要自己下載 ,下載地址。

客戶端代碼:

界面布局自己寫,很簡單的兩個button

package com.example.test; 
 
import com.example.test.R; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
import de.tavendo.autobahn.WebSocketConnection; 
import de.tavendo.autobahn.WebSocketConnectionHandler; 
import de.tavendo.autobahn.WebSocketException; 
 
public class MainActivity extends Activity implements OnClickListener { 
 
 private Button bt; 
 private EditText ed_name; 
 private EditText ed_text; 
 private Button bt1; 
 WebSocketConnection wsc; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 bt = (Button) findViewById(R.id.bt); 
 ed_name = (EditText) findViewById(R.id.ed_name); 
 ed_text = (EditText) findViewById(R.id.ed_text); 
 bt1 = (Button) findViewById(R.id.bt1); 
 bt.setOnClickListener(this); 
 bt1.setOnClickListener(this); 
 wsc = new WebSocketConnection(); 
 
 } 
 
 private void connect() { 
 System.out.println("開始連接websocket///"); 
 
 try { 
 
  wsc.connect("ws://192.168.1.245:8080/DriveServer/mainservlet", 
   new WebSocketConnectionHandler() { 
   
   @Override 
   public void onBinaryMessage(byte[] payload) { 
    System.out.println("onBinaryMessage size=" 
     + payload.length); 
   } 
 
   @Override 
   public void onClose(int code, String reason) { 
    System.out.println("onClose reason=" + reason); 
   } 
 
   @Override 
   public void onOpen() { 
    System.out.println("onOpen"); 
    showtext("連接成功"); 
    // wsc.sendTextMessage("Hello!"); 
    // wsc.disconnect(); 
   } 
   @Override 
   public void onRawTextMessage(byte[] payload) { 
    System.out.println("onRawTextMessage size=" 
     + payload.length); 
   } 
 
   @Override 
   public void onTextMessage(String payload) { 
    System.out.println("onTextMessage" + payload); 
    showtext(payload); 
   } 
 
   }); 
 } catch (WebSocketException e) { 
  // TODO Auto-generated catch block 
  e.printStackTrace(); 
 } 
 
 } 
 @Override 
 public void onClick(View v) { 
 // TODO Auto-generated method stub 
 int id = v.getId(); 
 switch (id) { 
  case R.id.bt : 
  wsc.sendTextMessage("我是客戶端,我通過ws往服務(wù)器發(fā)數(shù)據(jù)"); 
  break; 
  case R.id.bt1 : 
  connect(); 
  break; 
  default : 
  break; 
 } 
 } 
 private void showtext(String msg) { 
 Toast.makeText(this, msg, 0).show(); 
 } 
} 

下面是服務(wù)器代碼:

用的是jetty7自帶的websocket庫

package com.websocket; 
 
import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.nio.ByteBuffer; 
import java.nio.CharBuffer; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 
 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import org.eclipse.jetty.websocket.WebSocket; 
import org.eclipse.jetty.websocket.WebSocket.OnTextMessage; 
import org.eclipse.jetty.websocket.WebSocketServlet; 
 
public class ChatWebSocketServlet extends WebSocketServlet { 
 
 private static final long serialVersionUID = 911879078000755859L; 
 
 private List<MyWebSocket> list = new ArrayList<MyWebSocket>(); 
 
 class MyWebSocket implements OnTextMessage { 
 private String userName = "匿名用戶"; 
 
 public MyWebSocket(String userName) { 
  if (userName != null && userName.length() > 0) { 
  this.userName = userName; 
  } 
 } 
 
 private Connection conn; 
 
 public void onClose(int arg0, String arg1) { 
  // TODO Auto-generated method stub 
  System.out.println("onOpen 斷開連接了。。。。。。。。" + arg1 + " " + arg0); 
  list.remove(this); 
 } 
 
 public void onOpen(Connection arg0) { 
  // TODO Auto-generated method stub 
  System.out 
   .println("onOpen 連接了。。。。。。。。。。。。" + arg0.getMaxIdleTime()); 
  this.conn = arg0; 
  
  if (!list.contains(arg0)) { 
  list.add(this); 
  } else { 
  System.out.println("這個用戶已經(jīng)連接了"); 
  } 
  System.out.println(".." + list.size()); 
 } 
 
 public void onMessage(String arg0) { 
  
  String toname = arg0.substring(0, 3); 
  System.out.println("toname-->" + toname); 
  try { 
   
  list.get(0).getConn() 
   .sendMessage(arg0.substring(3)); 
  System.out.println("發(fā)送的數(shù)據(jù)" + arg0.substring(3)); 
  } catch (IOException e) { 
  // TODO Auto-generated catch block 
  e.printStackTrace(); 
  } 
 } 
 
 private Connection getConn() { 
  return this.conn; 
 } 
 } 
 
 public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) { 
 // TODO Auto-generated method stub 
 String name = ""; 
 name = arg0.getParameter("username"); 
 System.out.println(name + "is connected"); 
 return new MyWebSocket(name); 
 } 
 
 @Override 
 protected void service(HttpServletRequest request, 
  HttpServletResponse response) throws ServletException, IOException { 
 // TODO Auto-generated method stub 
 super.service(request, response); 
 } 
 
} 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android模仿知乎的回答詳情頁的動畫效果

    Android模仿知乎的回答詳情頁的動畫效果

    這篇文章主要介紹了Android模仿“知乎”的回答詳情頁的動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android控件RadioButton的使用方法

    Android控件RadioButton的使用方法

    這篇文章主要為大家詳細介紹了Android控件RadioButton的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android進階事件分發(fā)機制解決事件沖突

    Android進階事件分發(fā)機制解決事件沖突

    這篇文章主要為大家介紹了Android進階事件分發(fā)機制解決事件沖突過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 詳解Android使用Gradle統(tǒng)一配置依賴管理

    詳解Android使用Gradle統(tǒng)一配置依賴管理

    本篇文章主要介紹了詳解Android 使用 Gradle 統(tǒng)一配置依賴管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android自定義圓形進度條

    Android自定義圓形進度條

    這篇文章主要為大家詳細介紹了Android自定義圓形進度條的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android切圓角的幾種常見方式總結(jié)

    Android切圓角的幾種常見方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Android切圓角的常見方式,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-12-12
  • Android 手勢 正則匹配圖片實例代碼

    Android 手勢 正則匹配圖片實例代碼

    這篇文章主要介紹了Android 手勢 正則匹配圖片實例代碼,需要的朋友可以參考下
    2017-07-07
  • Android程序美化之自定義ListView背景的方法

    Android程序美化之自定義ListView背景的方法

    這篇文章主要介紹了Android自定義ListView背景的方法,結(jié)合實例形式分析了ListView控件背景操作方法及常見問題處理技巧,需要的朋友可以參考下
    2016-06-06
  • Android Studio 新建項目通過git上傳到碼云圖文教程詳解

    Android Studio 新建項目通過git上傳到碼云圖文教程詳解

    本文通過圖文并茂的方式給大家介紹了Android Studio 新建項目通過git上傳到碼云的方法,需要的朋友可以參考下
    2017-11-11
  • Android實現(xiàn) EditText輸入手機號空格功能

    Android實現(xiàn) EditText輸入手機號空格功能

    這篇文章主要介紹了Android實現(xiàn) EditText輸入手機號空格功能,實現(xiàn)思路是要重寫TextWatcher,每次EditText內(nèi)容變化,都判斷內(nèi)容是否符合要求,具體實例代碼大家參考下本文
    2018-02-02

最新評論

安岳县| 固原市| 宝兴县| 保山市| 孙吴县| 抚远县| 朔州市| 宁陵县| 浪卡子县| 平潭县| 绥阳县| 略阳县| 运城市| 清镇市| 无棣县| 敦化市| 汉源县| 驻马店市| 大悟县| 道真| 榆中县| 曲周县| 焦作市| 丹巴县| 丽江市| 延吉市| 黄山市| 衡东县| 宣武区| 庆云县| 安图县| 台东市| 天气| 二连浩特市| 凤凰县| 南木林县| 保定市| 营口市| 游戏| 新竹县| 盐池县|