安卓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浏 ...
随机推荐
- 分享一个php的防火墙,拦截SQL注入和xss
一个基于php的防火墙程序,拦截sql注入和xss攻击等 安装 composer require xielei/waf 使用说明 $waf = new \Xielei\Waf\Waf(); $waf- ...
- 国内外比较不错的php框架汇总
国外 1.laravel 2.symfony 3.yii 4.laminas(zendframework) 国内 1.thinkphp 2.ebcms 3.暂无
- Windows10数字权利永久激活教程
很多人用Windows10系统,但是没有办法激活,这个教程一定会让你永久激活windows10系统(并非ksm) 打开设置,查看是否激活 如果激活的话,先退掉秘钥,在Windows power ...
- UGOPEN实现解析NX表达式
UGOPEN函数UF_MODL_dissect_exp_string可以解析表达式,但是当表达式存在附注信息时,会将附注信息附加在 rhs_str上,例如: 这样,当单独获取附注信息时还需要拆分字符串 ...
- React 服务端渲染方案完美的解决方案
最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...
- spring aop 源码分析(三) @Scope注解创建代理对象
一.源码环境的搭建: @Component @Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON,proxyMode = ScopedP ...
- windows 漏洞列表
漏洞列表 #Security Bulletin #KB #Description #Operating System CVE-2017-0213 [Windows COM Eleva ...
- 使用类模板的C++线性表实现(数组方式)
main.h #ifndef _MAIN_H_ #define _MAIN_H_ #include <iostream> #include <exception> #inclu ...
- 步进电机的Arduino库函数
This library allows you to control unipolar or bipolar stepper motors. To use it you will need a ste ...
- 【暂咕咕咕】SuffixTree
#include<bits/stdc++.h> using namespace std; const int MAXN=1e6+10; typedef long long ll; char ...