android利用websocket协议与服务器通信
时间:2019-04-13
本文章向大家介绍android利用websocket协议与服务器通信,主要包括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, 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往服务器发数据"); break; case R.id.bt1 : connect(); break; default : break; } } private void showtext(String 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 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("这个用户已经连接了"); } 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("发送的数据" + 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); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 济西站构建大数据运营网络,打造智能化列车加工厂
- 五位数终端收购的域名dongxiao.cn已启用
- 全球互联网发展进入“拐点”——展望下一代互联网
- 2 分钟论文:语音生成表情包背后的技术原理
- 享学课堂谈-Python程序员的常见错误
- 区块链技术,如何提升网络安全?
- 趣店推“大白汽车”业务 启用域名dabaiqiche.com
- 糖果吃了那么多,你真的知道比特币分叉是咋回事吗?
- 静息态网络拓扑传输认知任务信息
- MYSQL字符串截取总结:LEFT、RIGHT、SUBSTRING、SUBSTRING
- 如何用Python提取中文关键词?
- 工信部:将加大网络提速降费力度加快百兆宽带普及
- 人工智能AI(5):线性代数之矩阵、线性空间
- iOS开发进阶篇——FRP与ReactiveCocoa的介绍(一)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Typora 完美结合 PicGo,写作体验更佳!
- 视频流媒体服务器EasyNVR在CentOS6.5上编译报 No such file or directory错误
- Flink Timer(定时器)机制及实现详解
- android:运行时权限工具类的封装
- Android:非Activity跳转Activity时要加FLAG?
- Java自动化测试(接口鉴权 16)
- Android:Tools命名空间原来是有大用处的
- Android:无线调试就是这么简单
- Java自动化测试(回写与断言 17)
- 一篇就够——Kotlin快速入门
- 微信大牛教你深入了解数据库索引
- SqlServer 资源消耗查询
- Android:检查通知权限并跳转到通知设置界面
- OpenShift应用发布和运维设计
- Android:依赖Module的问题汇总