WebSocketClient发送数据,和webSocketClient接收消息

webSocketClient发送消息

  @Override
    public void sendStardMessage(int function, int type, String message) {
        Log.i("function:type:message:", String.valueOf(function)+","+String.valueOf(type)+","+message);
        AssistanceMessage assistanceMessage = new AssistanceMessage(function, type, message);
        mWebSocketClient.send(assistanceMessage.toString());
    }

    private WebSocketClient mWebSocketClient;

webSocketClient接收消息:
目前理解的是,如果websocket链接成果,则通过onMessage()自动接收websocket的消息

private void connectWebSocket() throws URISyntaxException,Exception{
    URI uri;
        uri = new URI(WS_BASE_URL + "?accessToken=" + UserInfo.getAccessToken());

    mWebSocketClient = new WebSocketClient(uri, new Draft_17()) {
        @Override
        public void onOpen(ServerHandshake serverHandshake) {
            Log.i("Websocket onopen", serverHandshake.getHttpStatusMessage());
            //mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
            InternetService.WebsocketConnect=true;
        }

        @Override
        public void onMessage(String s) {
            handleMessage(s,new NetMsgHandlePresenter());
        }

        @Override
        public void onClose(int code, String reason, boolean remote) {
            Log.i("websocket onclose", reason);
            socket关闭加入必须处理状态处理??????
            InternetService.WebsocketConnect=false;
            InternetService.bindUserSucc=false;
  //          InternetService.showInfoMsg("注意网络断开,请重新登录");
          //  Log.i("WebSocket","onclose");
            InternetService.loginSucc=false;//先认为WEBSOCKET断开后就认为不在线。20170630
        }

        @Override
        public void onError(Exception ex) {
            Log.i("websocket onerror", ex.getMessage());
            InternetService.WebsocketConnect=false;

        }
    };

    try {
        mWebSocketClient.connect();
        Log.i("WebSocket connect()","success");
        InternetService.WebsocketConnect=true;
    } catch (Exception e) {
        Log.i("websocketConnectExp", e.getMessage());
        InternetService.WebsocketConnect=false;
    }

}

handleMessage处理websocket的消息

//从websocket传来的消息
    private void handleMessage(String message,NetServiceInterface netServiceInterface) {

        AssistanceMessage assistanceMessage = null;

        assistanceMessage = JSON.parseObject(message, AssistanceMessage.class);

        // handle message
        if (assistanceMessage == null) {
            return ;
        }

        int type = assistanceMessage.getType();
        // 消息
       if (type == FastMessageBodyType.TEXT_TYPE) {
          //  massistanceView.appendDialog("From:" + assistanceMessage.getBody());
           //收到消息怎么处理
          // return assistanceMessage.getBody();
           Log.i("From:" , assistanceMessage.getBody());
           netServiceInterface.handleMsg(assistanceMessage.getFunction(),assistanceMessage.getBody());
           InternetService.handleMsg(assistanceMessage.getFunction(),assistanceMessage.getBody());

           //getFunction()获取是主端还是从端,replay或者直接发起
        }

        // 文件
        else {
           buffer.append(new String(Base64.decode(assistanceMessage.getBody(),Base64.DEFAULT)));
            if ( assistanceMessage.getLastPackage()) {
                try {
                File sdCardDir = Environment.getExternalStorageDirectory();

                String DATABASE_PATH=sdCardDir.getCanonicalPath()+"/Amonitordata/";
                    revFilePath=DATABASE_PATH+assistanceMessage.getFileName();
                    filename=assistanceMessage.getFileName();
                    File outputFile = new File(revFilePath);

                    //如果此文件存在,删除此文件
                    if(outputFile.exists())
                    {
                        //outputFile.delete();
                        revFilePath=DATABASE_PATH+"remote"+assistanceMessage.getFileName();
                        outputFile = new File(revFilePath);
                    }
                        OutputStream outputStream = new FileOutputStream(outputFile);

                        outputStream.write(buffer.toString().getBytes());
                        outputStream.flush();

                        Log.i("Websocket写入到文件succ:" , assistanceMessage.getFileName());

                        outputStream.close();

                        buffer = new StringBuilder();
                        InternetService.revFile=true;
                        InternetService.InterRevFile(assistanceMessage.getFunction());
                } catch (IOException e) {

                    InternetService.showInfoMsg("无法接收文件");
                    InternetService.mb_RemoteMode=false;
                    InternetService.mb_driveCilent=true;
                    InternetService.revFile=false;
                    Log.i("Websocket无法写入文件:" , e.getMessage());
                }
            }



        }

    }

在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
extends WebSocketClient是一种用于创建WebSocket客户端的Java类。在使用WebSocket协议进行通信时,我们需要一个客户端实例来与服务器建立连接并进行数据交互。通过继承WebSocketClient类,我们可以自定义客户端的行为,以满足特定需求。 继承WebSocketClient类后,我们可以重写其中的方法,以实现自定义的行为。其中包括以下几个常用方法: 1. onOpen:该方法在与服务器成功建立WebSocket连接时触发。我们可以在此方法中执行一些初始化操作,或者发送首次的数据请求。 2. onClose:该方法在与服务器断开WebSocket连接时触发。我们可以在此方法中关闭相关的资源,或者执行一些清理操作。 3. onMessage:该方法在接收到服务器发送的消息时触发。我们可以在此方法中处理服务器返回的数据,并根据需要进行相应的逻辑操作。 4. onError:该方法在与服务器建立连接过程中出现错误时触发。我们可以在此方法中处理错误信息,并进行相应的错误处理。 通过继承WebSocketClient类,我们可以更好地控制客户端的行为,并根据具体需求进行定制。我们可以实现各种复杂的逻辑,如添加身份验证、编解码数据、处理心跳包等。这大大增加了WebSocket客户端的灵活性和扩展性。 总之,extends WebSocketClient是为了创建WebSocket客户端的Java类,并通过继承该类来实现自定义的行为和逻辑操作。这样能够更好地满足各种复杂的需求,提高WebSocket客户端的可用性和灵活性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鼾声鼾语

感谢您的支持鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值