在 Android 应用程序中实现与WebSocket 服务器的实时通信

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD

如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。

😊 座右铭:不想当开发的测试,不是一个好测试✌️。

如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

通过 OKHttp 请求库实现,在 OKhttp 中,通过 Websocket 类支持 WebSocket 通信。

总共分为以下几步:

  1. 添加依赖

    xml 复制代码
    dependencies {
    	implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    }
  2. 添加权限

    xml 复制代码
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET" />
  3. 创建 OKHttpClient 对象

    新建 java 文件,名为 myWebSocketClient,并创建OKHttpClient对象

    java 复制代码
    OkHttpClient client = new OkHttpClient();
  4. 创建请求,并输入websocket地址

    java 复制代码
    Request request = new Request.Builder().url("ws://100.100.34.115:8000").build();
  5. 添加 WebSocketListener 监听

    java 复制代码
    WebSocketListener listener = new WebSocketListener() {
          //@NonNull Response response)
          @Override
          public void onOpen(WebSocket webSocket, Response response) {
              super.onOpen(webSocket, response);
              webSocket.send("我是Android端,我连接成功啦");
              webSocket.send("我是Android端,我要开始发送设备信息啦");
    
              handler = new Handler(Looper.getMainLooper());
              handler.post(new Runnable() {
                  @Override
                  public void run() {
                      ToastUtils.showConnectionError(mContext);
                  }
              });
    
              //连接成功时的处理
              deviceInfoUtils = new DeviceInfoUtils();
              deviceInfoJson = deviceInfoUtils.getDeviceInformationAsJson();
    
              // 发送设备信息给服务器
              webSocket.send(deviceInfoJson);
          }
    
          @Override
          public void onMessage(WebSocket webSocket, String text) {
              super.onMessage(webSocket, text);
              // 接收到消息时的处理
          }
          @Override
          public void onClosed(WebSocket webSocket, int code, String reason) {
              super.onClosed(webSocket, code, reason);
              // 连接关闭时的处理
          }
          @Override
          public void onFailure(WebSocket webSocket, Throwable t, Response response) {
              super.onFailure(webSocket, t, response);
              Log.e("WebSocket","连接失败" +t.getMessage());
              handler = new Handler(Looper.getMainLooper());
              handler.post(new Runnable() {
                  @Override
                  public void run() {
                      Toast.makeText(mContext, "连接WebSocket失败", Toast.LENGTH_SHORT).show();
                  }
              });
    
              if(!isReconnecting) {
                  isReconnecting = true;
                  handler.postDelayed(new Runnable() {
                      @Override
                      public void run() {
                          connectWebSocket();
                          Log.i("重连","正在重连请稍后");
                          Toast.makeText(mContext, "正在重连,请稍后", Toast.LENGTH_SHORT).show();
                          isReconnecting = false;
                      }
                  },5000);
              }
          }
      };
      webSocket = client.newWebSocket(request, listener);
  6. 关闭连接逻辑

    java 复制代码
    public void disconnectWebSocket() {
       if (webSocket != null) {
           webSocket.cancel();
       }
    }
  7. 在合适的地方调用 WebSocketClient

    我是在MainActivity.java文件中的onCreate()方法中使用。因为我是逻辑需要,所以创建了一个myWebSocketClient构造方式,当然你们也可以省略。

    java 复制代码
    context = getApplicationContext();
    	myWebSocketClient = new myWebSocketClient(context);
    	myWebSocketClient.connectWebSocket();
相关推荐
光军oi31 分钟前
全栈开发杂谈————关于websocket若干问题的大讨论
java·websocket·apache
liu****5 小时前
基于websocket的多用户网页五子棋(九)
服务器·网络·数据库·c++·websocket·网络协议·个人开发
心态特好5 小时前
详解WebSocket及其妙用
java·python·websocket·网络协议
liu****5 小时前
基于websocket的多用户网页五子棋(八)
服务器·前端·javascript·数据库·c++·websocket·个人开发
子兮曰1 天前
WebSocket 连接:实现实时双向通信的前端技术
前端·javascript·websocket
千里马-horse1 天前
HTTP、WebSocket、XMPP、CoAP、MQTT、DDS 六大协议在机器人通讯场景应用
mqtt·websocket·http·机器人·xmpp·coap·fastdds
眠りたいです2 天前
基于脚手架微服务的视频点播系统-脚手架开发部分-jsoncpp,protobuf,Cpp-httplib与WebSocketpp中间件介绍与使用
c++·websocket·微服务·中间件·json·protobuf·cpp-httplib
paopaokaka_luck2 天前
基于SpringBoot+Vue的志行交通法规在线模拟考试(AI问答、WebSocket即时通讯、Echarts图形化分析、随机测评)
vue.js·人工智能·spring boot·后端·websocket·echarts
码侯烧酒3 天前
前端IM应用开发中的难点解析与总结
前端·websocket
从零开始学习人工智能4 天前
Spring Security 实战:彻底解决 CORS 跨域凭据问题与 WebSocket 连接失败
java·websocket·spring