引入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使用的更多相关文章

  1. 安卓websocket 封装基于Java-websocket

    本文借鉴于https://blog.csdn.net/u013872857/article/details/79190643感谢大神的贡献 借鉴文章所用websocket 第三方是:nv-websoc ...

  2. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  3. WebSocket安卓客户端实现详解(一)–连接建立与重连

    http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我 ...

  4. H5嵌入原生开发小结----兼容安卓与ios的填坑之路

    一开始听说开发H5,以为就是做适配现代浏览器的移动网页,心想不用管IE了,欧也.到今天,发现当初too young too simple,兼容IE和兼容安卓与IOS,后者让你更抓狂.接下来数一下踩过的 ...

  5. Android中脱离WebView使用WebSocket实现群聊和推送功能

    WebSocket是Web2.0时代的新产物,用于弥补HTTP协议的某些不足,不过他们之间真实的关系是兄弟关系,都是对socket的进一步封装,其目前最直观的表现就是服务器推送和聊天功能.更多知识参考 ...

  6. Websocket全讲解。跨平台的通讯协议 !!基于websocket的高并发即时通讯服务器开发。

    本博文,保证不用装B的话语和太多专业的语言,保证简单易懂,只要懂JAVAEE开发的人都可以看懂. 本博文发表目的是,目前网上针对Websocket的资料太散乱,导致初学者的知识体系零零散散,学习困难加 ...

  7. WebSocket 学习笔记--IE,IOS,Android等设备的兼容性问题与代码实现

    一.背景 公司最近准备将一套产品放到Andriod和IOS上面去,为了统一应用的开发方式,决定用各平台APP嵌套一个HTML5浏览器来实现,其中数据通信,准备使用WebSocket的方式.于是,我开始 ...

  8. 安卓APP测试之使用Burp Suite实现HTTPS抓包方法

    APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...

  9. WebSocket学习笔记IE,IOS,Android等设备的兼容性问

    WebSocket学习笔记IE,IOS,Android等设备的兼容性问 一.背景 公司最近准备将一套产品放到Andriod和IOS上面去,为了统一应用的开发方式,决定用各平台APP嵌套一个HTML5浏 ...

随机推荐

  1. 网络爬虫:利用selenium,pyquery库抓取并处理京东上的图片并存储到使用mongdb数据库进行存储

    一,环境的搭建已经简单的工具介绍 1.selenium,一个用于Web应用程序测试的工具.其特点是直接运行在浏览器中,就像真正的用户在操作一样.新版本selenium2集成了 Selenium 1.0 ...

  2. 【转】Postgres SQL sort 操作性能调优

    这篇文章将以实战的方式结合笔者在项目中真实遇到的情况来讲解.说到SQL,大家可能会遇到一些写法稍微复杂的写法.比如SQL中遇到的有聚合函数sum等,也有遇到使用group by / order by的 ...

  3. 面试官:一个 TCP 连接可以发多少个 HTTP 请求?

      曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式 ...

  4. gcc g++ 安装与配置 入门详解 - 精简归纳

    gcc g++ 安装与配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 24 转载请注明出处!️ 目录 gcc g++ 安装与配置 入门详解 - 精简归纳 一.下载MinGW ...

  5. vue学习06 v-show指令

    目录 vue学习06 v-show指令 v-show指令是:根据真假切换元素的显示状态 原理是修改元素的display,实现显示隐藏 指令后面的内容,最终都会解析为布尔值(true和false) 练习 ...

  6. Spring源码系列——容器的启动过程(一)

    一. 前言 Spring家族特别庞大,对于开发人员而言,要想全面征服Spring家族,得花费不少的力气.俗话说,打蛇打七寸,那么Spring家族的"七寸"是什么呢?我心目中的答案一 ...

  7. JavaScript函数报错SyntaxError: expected expression, got ';'

    故事背景:编写Javaweb项目,在火狐浏览器下运行时firebug报错SyntaxError: expected expression, got ';'或者SyntaxError: expected ...

  8. CISCO交换机STP实验(生成树协议)

    目录 一.前言:生成树协议(STP) 二.CISCO交换机STP命令汇总 三.运用STP搭建简单拓扑 四.实战:STP综合实验 五.结语 一.前言:生成树协议(STP) 计算机网络中,我们为了减少网络 ...

  9. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  10. 《C++primerplus》第6章练习题

    本来前面五题都做完了,写博客时没保存好草稿= =,写了个整合版的程序,实现前五题的关键部分. 1.定义一个叫jojo的结构,存储姓名.替身和力量值,使用动态结构数组初始化二乔.承太郎和乔鲁诺乔巴纳等人 ...