Java-WebSocket实现简单对话示例

       Java-WebSocket是对WebSocket进行封装的java语言开源框架,用于简化使用java语言和WebSocket技术建立客户端与服务端长连接的操作。关于WebSocket,下面是百度百科的一段概述,这里不做深入分析,重点在该框架的基本使用:

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocketAPI也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 [1] 

关于整理这个内容主要原因是目前在网络上查找的基本都是客户端的使用,基本没有找到服务端的实现,所以这里给出了客户端与服务端的基本使用实现

1,添加依赖 

下面我们进入主题,Java-WebSocket开源地址,添加到项目的方式(Android项目):

(1)项目gradle中的repositories中添加

  mavenCentral()

比如:

 repositories {
        google()
        jcenter()
        mavenCentral()
    }

(2)在module依赖中添加

compile "org.java-websocket:Java-WebSocket:1.4.0"

 

2,使用介绍

2.1 客户端

实现步骤:

  • 自定义消息收发客户端继承WebSocketClient,构建自己的构造方法,传入连接的URI
  • 实现以下几个抽象方法

onOpen():连接成功回调,获取握手数据

onMessage():接收消息回调,获取接收数据

onClose():关闭连接回调,获取关闭信息

onError():连接异常回调,获取异常信息

  • 获取自定义客户端实例,调用connect()方法即可,连接成功,即回调onOpen(),否则回调onClose()与onError()

客户端示例:

package aoto.com.client;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;

import java.net.URI;

/**
 * author:why
 * created on: 2019/7/8 15:54
 * description:
 */
public class ChatClient extends WebSocketClient {

    private static final String TAG = "ChatClientWhy";

    private static volatile ChatClient client = null;
    private  Handler mHandler;

    private ChatClient(URI uri,Handler handler) {
        super(uri);
        this.mHandler=handler;
    }

    /**
     * DCL
     *
     * @param uri
     * @return
     */
    public static ChatClient getInstance(URI uri,Handler handler) {
        if (client == null) {
            synchronized (ChatClient.class) {
                if (client == null) {
                    client = new ChatClient(uri,handler);
                }
            }
        }
        return client;
    }


    @Override
    public void onOpen(ServerHandshake handshakedata) {
        Log.e(TAG, "onOpen: "+handshakedata.getHttpStatusMessage());
        MessageHelper.sendMsg(mHandler,null,MessageId.OPEN);
    }

    @Override
    public void onMessage(String message) {
        Log.e(TAG, "onMessage: "+message);
        MessageHelper.sendMsg(mHandler,message,MessageId.SERVER_MSG);
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
        Log.e(TAG, "onClose: ");
        MessageHelper.sendMsg(mHandler,null,MessageId.CLOSE);
    }

    @Override
    public void onError(Exception ex) {
        Log.e(TAG, "onError: ");
    }

}

 

2.2  服务端

实现步骤如下:

  • 自定义服务端继承WebSocketServer,构建自己的构造方法,传入服务端口号
  • 实现以下几个抽象方法

onOpen():有客户端连接回调,回调参数中有连接WebSocket可用于发送消息,可保存通道用于发送数据

onClose():连接断开回调

onError():连接异常回调

onMessage():接收消息回调,回调参数中有连接WebSocket可用于发送消息,可保存通道用于发送数据

onStart():服务开启成功回调

  • 调用start()方法开启服务

服务端示例:

package aoto.com.server;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

import java.net.InetSocketAddress;

/**
 * author:why
 * created on: 2019/7/8 16:19
 * description:
 */
public class ChatServer extends WebSocketServer {

    private static final String TAG = "ChatServerWhy";
    private Handler mHandler;
    private WebSocket webSocket;
    public ChatServer(InetSocketAddress address){
        super(address);
    }

    public ChatServer(int port,Handler handler){
        super(new InetSocketAddress(port));
        this.mHandler=handler;
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        Log.e(TAG, "onOpen: "+conn.getLocalSocketAddress().getAddress().getHostAddress() );
        MessageHelper.sendMsg(mHandler,null,MessageId.OPEN);
        webSocket=conn;
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        Log.e(TAG, "onClose: " );
        MessageHelper.sendMsg(mHandler,null,MessageId.CLOSE);
    }

    @Override
    public void onMessage(WebSocket conn, String message) {
        Log.e(TAG, "onMessage: "+message );
        MessageHelper.sendMsg(mHandler,message,MessageId.CLIENT_MSG);
        webSocket=conn;
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
        Log.e(TAG, "onError: "+ex.getMessage() );
    }

    @Override
    public void onStart() {
        Log.e(TAG, "onStart: " );
    }

    public void sendMsg(String content){
        if(webSocket!=null) {
            webSocket.send(content);
        }
        else {
            Log.e(TAG, "sendMsg: 请先初始化" );
        }
    }
}

下面看一下Demo运行的效果图

 

注意:一定要做好资源管理与释放,这里只是最基本的使用演示,如果想要源码,可以评价留下方式,谢谢。

注:如果感觉有帮助,欢迎扫码关注

Android Java-WebSocket是一个用于在Android应用程序中实现WebSocket通信的库。它提供了一种简单而强大的方式来建立WebSocket连接,并通过发送和接收消息来实现实时通信。 使用Android Java-WebSocket,您可以轻松地创建WebSocket客户端,并与WebSocket服务器进行通信。以下是使用Android Java-WebSocket的一般步骤: 1. 添加依赖:在您的Android项目中,首先需要添加Android Java-WebSocket库的依赖。您可以通过在项目的build.gradle文件中添加以下行来完成: ``` implementation 'org.java-websocket:Java-WebSocket:1.5.1' ``` 2. 创建WebSocket客户端:使用Android Java-WebSocket,您可以创建一个WebSocketClient对象来表示WebSocket客户端。您可以指定服务器的URL和其他配置选项。 3. 实现WebSocket监听器:为了处理WebSocket连接的事件和消息,您需要实现WebSocketListener接口,并重写其中的方法。例如,您可以在onOpen方法中处理连接成功的事件,在onMessage方法中处理接收到的消息,在onClose方法中处理连接关闭的事件等。 4. 连接到WebSocket服务器:使用WebSocketClient对象,您可以调用connect方法来连接到WebSocket服务器。在连接成功后,将触发onOpen方法。 5. 发送和接收消息:一旦连接建立,您可以使用send方法发送消息到服务器,并通过onMessage方法接收服务器发送的消息。 6. 关闭连接:当您不再需要与服务器通信时,可以调用WebSocketClient对象的close方法来关闭连接。 这是一个简单Android Java-WebSocket的使用示例: ```java import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.java_websocket.WebSocket; import java.net.URI; import java.net.URISyntaxException; public class MyWebSocketClient extends WebSocketClient { public MyWebSocketClient(URI serverUri) { super(serverUri); } @Override public void onOpen(ServerHandshake handshakedata) { // 连接成功处理 } @Override public void onMessage(String message) { // 接收到消息处理 } @Override public void onClose(int code, String reason, boolean remote) { // 连接关闭处理 } @Override public void onError(Exception ex) { // 错误处理 } } // 在Activity或Fragment中使用 try { URI serverUri = new URI("ws://example.com/websocket"); MyWebSocketClient client = new MyWebSocketClient(serverUri); client.connect(); } catch (URISyntaxException e) { e.printStackTrace(); } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值