引入jar包:

  1. implementation "org.java-websocket:Java-WebSocket:1.4.0"
    implementation "org.slf4j:slf4j-nop:1.7.25"

先看服务端start之后就一直监听客户端的连接,可以连接多个客户端生成多个Websocket实例

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate( savedInstanceState );
  6. setContentView( R.layout.activity_main );
  7.  
  8. }
  9.  
  10. public static void main(String[] args) throws IOException {
  11.  
  12. final ChatServer chatServer = new ChatServer( 9999 );
  13.  
  14. chatServer.start();
  15.  
  16. }
  1. public class ChatServer extends WebSocketServer {
  2.  
  3. private WebSocket webSocket;
  4.  
  5. public ChatServer(int port){
  6. super(new InetSocketAddress(port));
  7. }
  8.  
  9. @Override
  10. public void onOpen(WebSocket conn, ClientHandshake handshake) {
  11. System.out.println("服务端打开"+conn.getLocalSocketAddress().getAddress().getHostAddress() );
  12.  
  13. webSocket=conn;
  14. }
  15.  
  16. @Override
  17. public void onClose(WebSocket conn, int code, String reason, boolean remote) {
  18. System.out.println("服务端关闭");
  19. }
  20.  
  21. @Override
  22. public void onMessage(WebSocket conn, String message) {
  23. System.out.println("服务端收到消息");
  24. conn.send( "服务端发送的消息" );
  25. webSocket=conn;
  26. }
  27.  
  28. @Override
  29. public void onError(WebSocket conn, Exception ex) {
  30.  
  31. System.out.println("服务端错误"+ex.getMessage() );
  32. }
  33.  
  34. @Override
  35. public void onStart() {
  36.  
  37. System.out.println("服务端开始");
  38. }
  39.  
  40. public void sendMsg(String content){
  41. if(webSocket!=null) {
  42. webSocket.send(content);
  43. }
  44. else {
  45. System.out.println("请先初始化" );
  46.  
  47. }
  48. }
  49. }

如果有客户端连接会执行onopen方法

然后是客户端:

  1. public class MainActivity3 extends AppCompatActivity {
  2. private ChatClient instance;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate( savedInstanceState );
  6. setContentView( R.layout.activity_main3 );
  7. URI uri = URI.create( "ws://192.168.0.32:9999" );
  8. instance = ChatClient.getInstance( uri );
  9.  
  10. new Thread() {
  11. @Override
  12. public void run() {
  13. try {
  14. //connectBlocking多出一个等待操作,会先连接再发送,否则未连接发送会报错
  15. instance.connectBlocking();
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. }.start();
  21. findViewById( R.id.main3button1 ).setOnClickListener( new View.OnClickListener() {
  22. @Override
  23. public void onClick(View view) {
  24. instance.send( "是的咖啡机" );
  25. }
  26. } );
  27. }
  28.  
  29. @Override
  30. protected void onDestroy() {
  31. super.onDestroy();
  32. try {
  33. if (null != instance) {
  34. instance.close();
  35. }
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. } finally {
  39. instance = null;
  40. }
  41. }
  42. }
  1. public class ChatClient extends WebSocketClient {
  2.  
  3. private static volatile ChatClient client = null;
  4. private Handler mHandler;
  5.  
  6. public ChatClient(URI uri) {
  7. super(uri);
  8.  
  9. }
  10.  
  11. /**
  12. * DCL
  13. *
  14. * @param uri
  15. * @return
  16. */
  17. public static ChatClient getInstance(URI uri) {
  18. if (client == null) {
  19. synchronized (ChatClient.class) {
  20. if (client == null) {
  21. client = new ChatClient(uri);
  22. }
  23. }
  24. }
  25. return client;
  26. }
  27.  
  28. @Override
  29. public void onOpen(ServerHandshake handshakedata) {
  30.  
  31. System.out.println("客户端打开"+handshakedata.getHttpStatusMessage());
  32.  
  33. }
  34.  
  35. @Override
  36. public void onMessage(String message) {
  37. System.out.println("收到信息"+message);
  38.  
  39. }
  40.  
  41. @Override
  42. public void onClose(int code, String reason, boolean remote) {
  43. System.out.println("客户端关闭");
  44.  
  45. }
  46.  
  47. @Override
  48. public void onError(Exception ex) {
  49. System.out.println("错误"+ex);
  50. }
  51.  
  52. }

安卓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. SVN检出maven项目

    (一)直接单击项目,右键选择configure,选择convert to maven project (二)删除project explorer中的项目,并重新从工作区间导入maven项目.

  2. windows服务器添加磁盘后,提示The disk is offline because of policy set by an administrator的解决办法

    操作系统:Windows Server 2008 R2 Enterprise 事件:存储在虚拟机上添加三块磁盘,笔者准备扩展到E盘(动态分区) 问题:存储团队添加磁盘后,OS的磁盘管理界面,看到提示, ...

  3. Redis学习(一)认识并安装redis

    一.初识redis Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的. Redis是运行在内存中的,但是可 ...

  4. Mac鼠标灵敏度调节

    系统的调节到最大还是无法满足你的时候那么你就该看看我接下来的操作了,请看: 查看 首先打开终端,输入一下命令: defaults read -g com.apple.mouse.scaling 此命令 ...

  5. Android App 侧边栏菜单的简单实现

    效果图 Layout 注意事项 想要实现侧边栏,需要配合使用DrawerLayout.因为会用到嵌套布局,所以根布局不能是 ConstraintLayout,最好使用 LinearLayout 布局. ...

  6. git 一个可以提高开发效率的命令:cherry-pick

    各位码农朋友们一定有碰到过这样的情况:在develop分支上辛辛苦苦撸了一通代码后开发出功能模块A,B,C,这时老板过来说,年青人,我们现在先上线功能模块A,B.你一定心里一万只草泥马奔腾而过,但为了 ...

  7. mybatis基础使用

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .20 ...

  8. module(JS模块系统)

    JS - module(模块系统) 重新学习ES6 倒数第一章 module 什么是module? 百度的解释 之前接触过AngularJS,现在看Dojo,都有对模块的使用.在dojo官网看到这段文 ...

  9. Python练习题 017:三支乒乓球队出赛名单

    [Python练习题 017] 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比.请编程序找 ...

  10. C 多态 RT-Thread

    // RT-Thread对象模型采用结构封装中使用指针的形式达到面向对象中多态的效果,例如: // 抽象父类 #include <stdio.h> #include <assert. ...