大佬教程收集整理的这篇文章主要介绍了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(); } }
下面是服务器代码:
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,请注明来意。