本文借鉴于https://blog.csdn.net/u013872857/article/details/79190643感谢大神的贡献

借鉴文章所用websocket 第三方是:nv-websocket-client:2.2,

而这里所用的是:Java-WebSocket:1.3.0

核心代码如下:

  1. public abstract class MyWebSocketService extends Service implements IWebSocket {
  2.  
  3. private static final String TAG = MyWebSocketService.class.getSimpleName();
  4. private ServiceBinder binder = new ServiceBinder();
  5.  
  6. private int connectStatus = 0;
  7.  
  8. private WebSocketThread webSocketThread;
  9. private WebSocketClient client;
  10.  
  11. @Nullable
  12. @Override
  13. public IBinder onBind(Intent intent) {
  14. Log.i(TAG, "onBind: ");
  15. if (binder == null){
  16. binder = new MyWebSocketService.ServiceBinder();
  17. }
  18. return binder;
  19. }
  20. public class ServiceBinder extends Binder {
  21. public MyWebSocketService getService() {
  22. return MyWebSocketService.this;
  23. }
  24. }
  25.  
  26. @Override
  27. public void onCreate() {
  28. super.onCreate();
  29. Log.i(TAG, "onCreate: ");
  30. // 连接
  31. webSocketThread = new MyWebSocketService.WebSocketThread();
  32. webSocketThread.start();
  33.  
  34. }
  35. private class WebSocketThread extends Thread {
  36. @Override
  37. public void run() {
  38. Log.i(TAG, "run: ");
  39. setupWebSocket();
  40. }
  41. }
  42.  
  43. protected void setupWebSocket(){
  44. Log.i(TAG, "setupWebSocket: ");
  45. if (connectStatus != 0) return;
  46. connectStatus = 1;
  47. try {
  48. client = new WebSocketClient(URI.create(getConnectUrl()), new Draft_10()) {
  49. @Override
  50. public void onOpen(ServerHandshake handshakedata) {
  51. connectStatus = 2;
  52. }
  53.  
  54. @Override
  55. public void onMessage(String message) {
  56. Log.i(TAG, "onMessage: " + message);
  57. // 消息分发
  58. dispatchResponse(message);
  59. }
  60.  
  61. @Override
  62. public void onClose(int code, String reason, boolean remote) {
  63. Log.e(TAG, "onClose: " + code + reason);
  64. connectStatus = 0;
  65. // EventBus 通知
  66.  
  67. }
  68.  
  69. @Override
  70. public void onError(Exception ex) {
  71. Log.e(TAG, "onError: " + ex.getMessage());
  72. connectStatus = 0;
  73. // EventBus 通知
  74. }
  75.  
  76. };
  77. client.connect();
  78. }catch (Exception e){
  79. e.printStackTrace();
  80. }
  81.  
  82. }
  83.  
  84. @Override
  85. public void onDestroy() {
  86. super.onDestroy();
  87. Log.i(TAG, "onDestroy: ");
  88. }
  89.  
  90. @Override
  91. public void sendText(String text) {
  92. Log.i(TAG, "sendText From Four Activity : " + text);
  93. if (TextUtils.isEmpty(text)) return;
  94. if (client != null && connectStatus == 2){
  95. client.send(text);
  96. }
  97. }
  98.  
  99. @Override
  100. public int getConnectStatus() {
  101. return connectStatus;
  102. }
  103.  
  104. @Override
  105. public void reconnect() {
  106. Log.i(TAG, "reconnect: ");
  107. new Thread(new Runnable() {
  108. @Override
  109. public void run() {
  110. try {
  111. Thread.sleep(200);
  112. } catch (InterruptedException e) {
  113. e.printStackTrace();
  114. }
  115. if (webSocketThread != null && webSocketThread.isAlive()){
  116. connectStatus = 0;
  117. webSocketThread = new WebSocketThread();
  118. webSocketThread.start();
  119. }else {
  120. Log.e(TAG, "run: reconnect action is Failed " );
  121. }
  122. }
  123. }).start();
  124. }
  125.  
  126. @Override
  127. public void stop() {
  128. Log.i(TAG, "stop: ");
  129. client.close();
  130. connectStatus = 0;
  131. }
  132.  
  133. /**
  134. * 获取服务器地址
  135. * @return
  136. */
  137. protected abstract String getConnectUrl();
  138.  
  139. /**
  140. * 分发响应数据
  141. */
  142. protected abstract void dispatchResponse(String textResponse);
  143.  
  144. }

同借鉴文章中 AbsBaseWebSocketService.java 文件

其主要功能是:

实现websocket 连接过程中几个行为:IWebSocket,

提供具体的服务绑定,

开启websocket 连接线程,回调消息处理等

其他代码不多加赘述,请先看借鉴文章,之后便对此一目了然,如有不懂,可在下方评论区留言,

谢谢!

安卓websocket 封装基于Java-websocket的更多相关文章

  1. 基于Java的WebSocket推送

    WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

  2. 基于java webRct webSocket 实现点对点视频 (需要源码的请加支付宝好友)

    打开支付宝首页搜“555176706”领红包,即可加好友 <%@ page language="java" pageEncoding="UTF-8"%&g ...

  3. 基于Java API for WebSocket (JSR-356)的标准websocket客户端

    maven依赖 springboot <dependency> <groupId>org.springframework.boot</groupId> <ar ...

  4. Java WebSocket实现网络聊天室(群聊+私聊)

    1.简单说明 在网上看到一份比较nice的基于webSocket网页聊天项目,准备看看学习学习,如是有了这篇文章!原博主博客:http://blog.csdn.net/Amayadream/artic ...

  5. java websocket学习

    引言: websocket,webservice傻傻分不清楚,都觉得是很高深的东西,理解中的webservice是一种协议,通信协议,类似http协议的那种,比如使用webservice协议调后台接口 ...

  6. Java WebSocket 线程安全的保证

    Java WebSocket线程安全基于3点: 1 在新的客户端连接时,WebSocket容器会创建一个新的端点实例,对应的会话实例表示从唯一的客户端到该端点实例的唯一连接. 2 每个WebSocke ...

  7. JAVA WebSocKet ( 实现简单的前后端即时通信 )

    1, 前端代码 HTML5 部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...

  8. SpringBoot集成WebSocket【基于纯H5】进行点对点[一对一]和广播[一对多]实时推送

    代码全部复制,仅供自己学习用 1.环境搭建 因为在上一篇基于STOMP协议实现的WebSocket里已经有大概介绍过Web的基本情况了,所以在这篇就不多说了,我们直接进入正题吧,在SpringBoot ...

  9. java websocket 简单使用【案例】

    现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...

随机推荐

  1. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  2. BringWindowToTop完美激活窗口与置顶

    void ActiveWin(IntPtr h) { IntPtr hForeWnd = GetForegroundWindow();//获取当前窗口句柄 int tIdCur = GetWindow ...

  3. EF Core 相关的千倍性能之差: AutoMapper ProjectTo VS Mapster ProjectToType

    在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了 AutoMapper ProjectTo<T> 与 Mapste ...

  4. php删除文件夹

    function deldir($dir) { $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." & ...

  5. [ipsec][crypto] IKEv2的协商交互分析

    一: 无论协商了什么样的加密算法.DH都交换一块长度为32byte的内存,作为key. IKE和esp的key,分别基于这块内存生成. 二: 当esp的算法协商没有指定dh group时,rekey将 ...

  6. [emacs] emacs设置python code的indent

    装python-mode的包 https://gitlab.com/python-mode-devs/python-mode/tree/master python-mode emacswiki文档 e ...

  7. qss qt按钮自定义

  8. linux基础命令--userdel 删除用户帐户和相关文件

    描述 userdel命令用于删除用户帐户和相关文件. userdel命令修改系统账户文件,删除所有涉及用户的信息,指定的用户(LOGIN)必须存在. 语法 userdel [options] LOGI ...

  9. centos下etcd集群安装

    先仔细了解学习etcd 官方: https://github.com/etcd-io/etcd https://www.cnblogs.com/softidea/p/6517959.html http ...

  10. new Date() 日期格式处理

    var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...