安卓WebSocket使用
引入jar包:
implementation "org.java-websocket:Java-WebSocket:1.4.0"
implementation "org.slf4j:slf4j-nop:1.7.25"
先看服务端start之后就一直监听客户端的连接,可以连接多个客户端生成多个Websocket实例
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
}
public static void main(String[] args) throws IOException {
final ChatServer chatServer = new ChatServer( 9999 );
chatServer.start();
}
public class ChatServer extends WebSocketServer {
private WebSocket webSocket;
public ChatServer(int port){
super(new InetSocketAddress(port));
}
@Override
public void onOpen(WebSocket conn, ClientHandshake handshake) {
System.out.println("服务端打开"+conn.getLocalSocketAddress().getAddress().getHostAddress() );
webSocket=conn;
}
@Override
public void onClose(WebSocket conn, int code, String reason, boolean remote) {
System.out.println("服务端关闭");
}
@Override
public void onMessage(WebSocket conn, String message) {
System.out.println("服务端收到消息");
conn.send( "服务端发送的消息" );
webSocket=conn;
}
@Override
public void onError(WebSocket conn, Exception ex) {
System.out.println("服务端错误"+ex.getMessage() );
}
@Override
public void onStart() {
System.out.println("服务端开始");
}
public void sendMsg(String content){
if(webSocket!=null) {
webSocket.send(content);
}
else {
System.out.println("请先初始化" );
}
}
}
如果有客户端连接会执行onopen方法
然后是客户端:
public class MainActivity3 extends AppCompatActivity {
private ChatClient instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main3 );
URI uri = URI.create( "ws://192.168.0.32:9999" );
instance = ChatClient.getInstance( uri );
new Thread() {
@Override
public void run() {
try {
//connectBlocking多出一个等待操作,会先连接再发送,否则未连接发送会报错
instance.connectBlocking();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
findViewById( R.id.main3button1 ).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
instance.send( "是的咖啡机" );
}
} );
}
@Override
protected void onDestroy() {
super.onDestroy();
try {
if (null != instance) {
instance.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
instance = null;
}
}
}
public class ChatClient extends WebSocketClient {
private static volatile ChatClient client = null;
private Handler mHandler;
public ChatClient(URI uri) {
super(uri);
}
/**
* DCL
*
* @param uri
* @return
*/
public static ChatClient getInstance(URI uri) {
if (client == null) {
synchronized (ChatClient.class) {
if (client == null) {
client = new ChatClient(uri);
}
}
}
return client;
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("客户端打开"+handshakedata.getHttpStatusMessage());
}
@Override
public void onMessage(String message) {
System.out.println("收到信息"+message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("客户端关闭");
}
@Override
public void onError(Exception ex) {
System.out.println("错误"+ex);
}
}
安卓WebSocket使用的更多相关文章
- 安卓websocket 封装基于Java-websocket
本文借鉴于https://blog.csdn.net/u013872857/article/details/79190643感谢大神的贡献 借鉴文章所用websocket 第三方是:nv-websoc ...
- WebSocket安卓客户端实现详解(三)–服务端主动通知
WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...
- WebSocket安卓客户端实现详解(一)–连接建立与重连
http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...
- H5嵌入原生开发小结----兼容安卓与ios的填坑之路
一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...
- Android中脱离WebView使用WebSocket实现群聊和推送功能
WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...
- Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。
本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...
- WebSocket 学习笔记--IE,IOS,Android等设备的兼容性问题与代码实现
一.背景 公司最近准备将一套产品放到Andriod和IOS上面去,为了统一应用的开发方式,决定用各平台APP嵌套一个HTML5浏览器来实现,其中数据通信,准备使用WebSocket的方式.于是,我开始 ...
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...
- WebSocket学习笔记IE,IOS,Android等设备的兼容性问
WebSocket学习笔记IE,IOS,Android等设备的兼容性问 一.背景 公司最近准备将一套产品放到Andriod和IOS上面去,为了统一应用的开发方式,决定用各平台APP嵌套一个HTML5浏 ...
随机推荐
- 11.深入k8s:kubelet工作原理及源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 kubelet信息量是很大的,通过我这一篇文章肯定是讲不全的,大家可 ...
- ssh 远程执行命令 nohup 无效问题
昨夜1:00多准备睡觉了,突然一哥们咨询了我一个问题. 他A机器上远程执行B机器(ssh user@ip "command")上的脚本,B上的服务并没有起来. 看了下截图,脚本确实 ...
- 容器云平台No.9~kubernetes日志收集系统EFK
EFK介绍 EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案. 通过EFK,可以把集群的所有日志收集到El ...
- Github 个人首页的 README,这样玩儿~
本文首发于 Ficow Shen's Blog,原文地址: Github 个人首页的 README,这样玩儿~. 内容概览 前言 创建仓库 修改 README 的内容 总结 前言 大家最近有没有发现这 ...
- 《Java从入门到失业》第四章:类和对象(4.5):包
4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...
- 提交 linux kernel 补丁流程备忘录
1. 订阅 linux 邮件列表 linux 邮件列表 Kernel Mailing Lists 是所有 linux kernel 开源贡献者协同工作的平台,可以通过向 VGER.KERNEL.ORG ...
- hystrix ,feign,ribbon的超时时间配置,以及原理分析
背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...
- Centos-退出抽取设备-eject
eject 退出抽取设备,如光驱或磁带,如果设备已经挂载,则卸载设备 相关选项 -q 退出磁盘 -r 退出光盘 -d 显示默认设备
- 【网络协议】TCP/IP:数据链路层
物理层负责把计算机中的0.1数字信号转换为具体传输媒介的物理信号(电压的高低.电波的强弱.光的闪灭) 数据链路层协议定义了(通过通信介质互连的设备间的)数据传输规范 (常见的通信介质有同轴电缆.双绞线 ...
- Doug Lea在J.U.C包里面写的BUG又被网友发现了
这是why的第 69 篇原创文章 BUG描述 一个编号为 8073704 的 JDK BUG,将串联起我的这篇文章. 也就是下面的这个链接. https://bugs.openjdk.java.net ...