文章目录

  • 一、添加依赖和权限
  • 二、创建 WebSocketClient 客户端类
  • 三、建立连接并发送消息

使用 https://github.com/TooTallNate/Java-WebSocket 框架 ;

一、添加依赖和权限


在 build.gradle 构建脚本中 , 添加依赖 :

implementation 'org.java-websocket:Java-WebSocket:1.5.2'

在 AndroidManifest.xml 清单文件中 , 添加网络权限 :

<uses-permission android:name="android.permission.INTERNET" />

二、创建 WebSocketClient 客户端类


创建 org.java_websocket.client.WebSocketClient 子类 ;

package kim.hsl.websocketdemoimport android.util.Log
import org.java_websocket.client.WebSocketClient
import org.java_websocket.handshake.ServerHandshake
import java.lang.Exception
import java.net.URIopen class MyWebSocketClient(serverUri: URI?) : WebSocketClient(serverUri) {val TAG = "MyWebSocketClient"override fun onOpen(handshakedata: ServerHandshake?) {Log.i(TAG, "onOpen handshakedata=$handshakedata")}override fun onMessage(message: String?) {Log.i(TAG, "onMessage message=$message")}override fun onClose(code: Int, reason: String?, remote: Boolean) {Log.i(TAG, "onClose code=$code reason=$reason remote=$remote")}override fun onError(ex: Exception?) {Log.i(TAG, "onError ex=$ex")}
}

三、建立连接并发送消息


创建 客户端 对象 : 设置 WebSocket 地址 , 使用匿名内部类的方式实现 , 主要是为了在本类中获取 onMessage 方法中接收的来自服务器端的消息 ;

var uri: URI? = URI.create("ws://***自己实现服务器端***")
var client: MyWebSocketClient = object : MyWebSocketClient(uri){override fun onMessage(message: String?) {super.onMessage(message)}
}

连接服务器 : 调用 org.java_websocket.client.WebSocketClient 的 connectBlocking() 函数 , 即可连接远程服务器并阻塞该线程 , 服务器连接成功后 , 会回调该类的 onOpen 方法 , 并解除阻塞 ;

client.connectBlocking()

向服务器发送数据 : 调用 org.java_websocket.client.WebSocketClient 的 send() 函数 , 即可向远程服务器发送消息 , 回送的消息在 onMessage 回调方法中的 message: String? 参数可以获取到 ;

client.send("**自定义消息**")

完整代码如下 :

package kim.hsl.websocketdemoimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import java.net.URIclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 服务器端 WebSocket 地址var uri: URI? = URI.create("ws://***自己实现服务器端***")// 创建客户端对象var client: MyWebSocketClient = object : MyWebSocketClient(uri){override fun onMessage(message: String?) {super.onMessage(message)}}// 连接远程服务器client.connectBlocking()// 发送消息client.send("**自定义消息**")}
}

执行结果如下 :

【Android WebSocket】Android 端 WebSocket 基本用法 ( 添加依赖和权限 | 创建 WebSocketClient 客户端类 | 建立连接并发送消息 )相关推荐

  1. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 )

    文章目录 一.下载 Java-WebSocket 源码 二.Android Studio 工程导入 Java-WebSocket 源码 使用 https://github.com/TooTallNat ...

  2. vue项目使用webSocket前后端建立连接推送消息

    <!DOCTYPE html> <html> <head><meta charset="utf-8"><title>we ...

  3. kafka服务端版本号0.10.2,客户端版本号2.0 如何发送消息

    项目中用到kafka,应用作为生产者,发送消息时,报错: Magic v1 does not support record headers 网上也有很多同样的博客记录这个错误,如:https://zh ...

  4. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 简介 | 权限申请处理细节 | 添加依赖 | 界面权限申请结果处理 | 权限申请结果回调接口 )

    文章目录 一.EasyPermissions 简介 二.EasyPermissions 权限申请处理细节 三.添加 EasyPermissions 依赖 四.权限申请结果处理 方法 onRequest ...

  5. Android Studio 解决 Cannot resolve symbol xxx 添加依赖后出现飘红

    这里博主分享下自己在Android Studio中遇到"Cannot resolve symbol 'xxx'"的解决方法,希望对大家有所帮助. 1.将有问题的依赖注释掉(ctrl ...

  6. Android之在一个类里面注册Handler发送消息在另外一个类里面接收消息

    1.问题 我们要在一个类里面变量或者函数变化需要改变另外一个类里面的东西,这个时候java里面除了接口回调之外,我们还可以用注册Handler来实现 2.代码实现 1.MainActivity.jav ...

  7. js websocket建立连接时发送token给后端发送不了

    第一种方式,是降token明文携带在url中,当然很多人可能觉得这种方法不够安全,也不够优雅. 那第二种方式就是利用子协议数组,将token携带在protocols里, var ws = new We ...

  8. 单枪匹马撸个聊天室, 支持Web/Android/iOS三端

    单枪匹马撸个聊天室, 支持Web/Android/iOS三端 原文地址: github.com/yinxin630/b- 前排提醒, 阅读本文需要对JavaScript较为熟悉, 本文将讲解核心功能点 ...

  9. Spring boot 实现 WebSocket服务端

    Spring boot 实现 WebSocket服务端 这里写目录标题 Spring boot 实现 WebSocket服务端 声明 准备工作 1. 配置 2. WebSocket服务类 3. 编写客 ...

最新文章

  1. r语言remarkdown展示图_使用R语言包circlize可视化展示blast双序列比对结果
  2. 源码资本张宏江:只有算法和技术,那你一定挣不到钱
  3. 火星无人机同款技术全部公开!高通还特意给Plus了一下
  4. Failed to find byte code for java/util/function/BiConsumer
  5. 大话数据结构 17:图的深度优先遍历和广度优先遍历
  6. virtualbox 采用 NAT 还是 BRIDGE
  7. LeetCode 1190. 反转每对括号间的子串(栈)
  8. 腾讯云加码 IDaaS,加速 SaaS 时代进程
  9. wps html编辑表格,手机wps中怎么编辑表格图文教程
  10. 游戏王ygocore项目解析
  11. 神经网络如何利用C语言实现动画?
  12. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(上篇)(期末大作业、课程设计、毕业设计、结课项目)
  13. dnf时装补丁教程_dnf时装补丁怎么用?DNF时装补丁教程
  14. chipsel语言_英美句子的不同表达
  15. 零基础怎么学好3D建模?只需要了解下面几点
  16. 域控服务器里没有internet时间,加入域之后,【Internet 时间】选项没有了
  17. CSDN论坛如何能够获得积分呢?
  18. 区块链技术解决投行电子底稿监管痛点 中国证券业协会在“中证链”发布首个应用
  19. 猫喜欢吃鱼,可猫不会游泳,鱼喜欢吃蚯蚓,可鱼不会上岸;上帝给了你很多诱惑,却不会让你轻易实现!...
  20. 门店私域运营,突围线上冲击

热门文章

  1. 流水线经典讲解!!!!!
  2. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
  3. OPatch cannot find a valid oraInst.loc file to locate Central Inventory
  4. Buffer Cache Hit Ratio
  5. 动态链接库的编写与调用
  6. Imagine,is real crazy!
  7. 老雷socket编程之PHP利用socket扩展实现聊天服务
  8. 报错:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
  9. python学习-----9.7-----GIL、死锁递归锁、信号量,event事件
  10. LeetCode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)