Android開発-WebSocketWssDemo

4910 ワード

Androidはwss://www.ceshi.com:8084このようなWebSocketサーバ
 
依存関係:
    implementation 'org.java-websocket:Java-WebSocket:1.4.1'

コード:
package com.iwanghang.websocketwssdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.helpers.Util;

import java.net.URI;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class MainActivity extends AppCompatActivity {

    private Handler handler;
    private WebSocketClient mSocketClient;
    public static final String socket_rul = "wss://www.ceshi.com:8084"; // WebSocket    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private void initWebSocket() {
        try {
            Log.i("WebSocketWssDemo", "init");
            mSocketClient = new WebSocketClient(URI.create(socket_rul), new Draft_6455()) {
                @Override
                public void onOpen(ServerHandshake handshakedata) { //     
                    Log.i("WebSocketWssDemo", "onOpen
" + handshakedata); handler.obtainMessage(0, handshakedata).sendToTarget(); } @Override public void onMessage(String message) { // Log.i("WebSocketWssDemo", "onMessage
" + message); handler.obtainMessage(0, message).sendToTarget(); } @Override public void onClose(int code, String reason, boolean remote) { // Log.i("WebSocketWssDemo", "onClose
" + reason); handler.obtainMessage(0, reason).sendToTarget(); } @Override public void onError(Exception ex) { Log.i("WebSocketWssDemo", "onError
" + ex); } }; // wss SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[] { new X509TrustManager() { @SuppressLint("TrustAllX509TrustManager") @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } @SuppressLint("TrustAllX509TrustManager") @Override public void checkServerTrusted(X509Certificate[] chain, String authType) { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } }, new SecureRandom()); SSLSocketFactory factory = sslContext.getSocketFactory(); mSocketClient.setSocketFactory(factory); mSocketClient.connect(); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (mSocketClient != null){ mSocketClient.close(); } } public void sendMessageClick(View view) { if (mSocketClient != null){ mSocketClient.send("join"); } } @SuppressLint("HandlerLeak") public void initWebSocketClientClick(View view) { initWebSocket(); handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.i("WebSocketWssDemo", msg.toString()); } }; } }

アクセス権:
    

インタフェース: