Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android利用websocket协议与服务器通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

最近做一个项目,需求中需要服务器主动推送消息到客户端。这样的话一般的http连接就不能使用了。博主问了个朋友,向我推荐websocket协议,特此测试了一下,发现效果很好。

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,@R_450_10495@ng 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(@R_450_10495@ng 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往服务器发数据"); 
    break; 
   case R.id.bt1 : 
    connect(); 
    break; 
   default : 
    break; 
  } 
 } 
 private void showtext(@R_450_10495@ng msg) { 
  Toast.makeText(this,msg,0).show(); 
 } 
} 

下面是服务器代码

用的是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 @R_450_10495@ng userName = "匿名用户"; 
 
  public MyWebSocket(@R_450_10495@ng userName) { 
   if (userName != null && userName.length() > 0) { 
    this.username = userName; 
   } 
  } 
 
  private Connection conn; 
 
  public void onClose(int arg0,@R_450_10495@ng 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("这个用户已经连接了"); 
   } 
   System.out.println(".." + list.size()); 
  } 
 
  public void onmessage(@R_450_10495@ng arg0) { 
    
   @R_450_10495@ng toname = arg0.sub@R_450_10495@ng(0,3); 
   System.out.println("toname-->" + toName); 
   try { 
     
    list.get(0).getConn() 
      .sendmessage(arg0.sub@R_450_10495@ng(3)); 
    System.out.println("发送的数据" + arg0.sub@R_450_10495@ng(3)); 
   } catch (IOException E) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
   } 
  } 
 
  private Connection getConn() { 
   return this.conn; 
  } 
 } 
 
 public WebSocket doWebSocketConnect(httpServletrequest arg0,@R_450_10495@ng arg1) { 
  // TODO Auto-generated method stub 
  @R_450_10495@ng 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); 
 } 
 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

大佬总结

以上是大佬教程为你收集整理的android利用websocket协议与服务器通信全部内容,希望文章能够帮你解决android利用websocket协议与服务器通信所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。