安卓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浏 ...
随机推荐
- 如何解决Python下 pip install module 下载慢解决方法?
对于Python来编程的用户最大的一个痛点就是,下载模块是下载速度特别慢,那么有没有解决方法呢? 换Python的pip下载源 1.首先安装一个模块 pqi,在cmd下 pip install pqi ...
- Oracle学习(十三)优化专题
一.查询频繁,数据量大 索引 使用时机:表中经常查询的字段可以考虑添加索引. 联合索引:若能确认多个条件会同时使用时,可以将这几个条件作为联合索引. 单列索引:若条件查询时,这几个条件不是同时用到的话 ...
- Laravel驱动管理类Manager的分析和使用
Laravel驱动管理类Manager的分析和使用 第一部分 概念说明 第二部分 Illuminate\Support\Manager源码 第三部分 Manager类的使用 第一部分:概念解释 结合实 ...
- Mac鼠标灵敏度调节
系统的调节到最大还是无法满足你的时候那么你就该看看我接下来的操作了,请看: 查看 首先打开终端,输入一下命令: defaults read -g com.apple.mouse.scaling 此命令 ...
- GAN生成的评价指标 Evaluation of GAN
传统方法中,如何衡量一个generator ?-- 用 generator 产生数据的 likelihood,越大越好. 但是 GAN 中的 generator 是隐式建模,所以只能从 P_G 中采样 ...
- osgEarth使用笔记4——加载矢量数据
目录 1. 概述 2. 详论 2.1. 基本绘制 2.2. 矢量符号化 2.2.1. 可见性 2.2.2. 高度设置 2.2.3. 符号化 2.2.4. 显示标注 2.3. 其他 3. 结果 4. 问 ...
- 记一次ElementUI源码修改过程
修改目的 使用ElementUI el-tree过程发现选中节点,键盘移动上下键时(key down\key up)el-tree默认高亮移动的节点,业务上需要重写此事件. 从官网发现该事件没有暴露 ...
- 【题解】[APIO2010]特别行动队
Link 题目大意:一段区间的贡献是\(ax^2+bx+c,x=\sum v\),求一个划分让总区间的价值最大.分段必须连续. \(\text{Solution:}\) 设计\(dp[i]\)表示前\ ...
- Golang搭建接口测试框架
测试报告 使用goconvey作为测试报告,使用方法: 安装 $ go get github.com/smartystreets/goconvey $ $GOPATH/bin/goconvey 导入包 ...
- The comparison between object and constructor
1.相似的地方 1.举个栗子:public struct Student{ string name; int age;}public class bike{ int weight; ...