Как я могу соединить клиента websocket в Java с сервером websocket в nodejs? - PullRequest
0 голосов
/ 30 сентября 2019

Я разрабатываю приложение для обмена сообщениями для Android (написанное на Java) на основе WebSockets (библиотека для клиентской части WebSocket: https://github.com/TooTallNate/Java-WebSocket, его документация: https://www.javadoc.io/doc/org.java-websocket/Java-WebSocket/1.4.0),, но клиент, похоже, не можетподключиться к серверу (написанному в nodeJs и распространяемому с herokuapp).

после некоторых онлайн-исследований я попытался добавить эти строки кода в манифест, но, похоже, все равно не работает:

<uses-permission android:name="android.permission.INTERNET" > 
</uses-permission>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
 </uses-permission>

код сервера:

const SocketServer = require('ws').Server;

const port = process.env.PORT || 3000;

const server = require('express')().listen(port);
const wsServer = new SocketServer({ server });

wsServer.on('connection', (ws) => {

    console.log('connected');

    ws.on('message', (arrayData) => {

        console.log('a message has arrived');
    });
}); 

код клиента (основной вид деятельности):

package com.example.chat;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import java.net.URI;
import java.net.URISyntaxException;

public class MainActivity extends AppCompatActivity {

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

        connectToServer();
    }

    void connectToServer(){
        URI uri;

        try {
            uri = new URI("wss://earthonline.herokuapp.com");
        } catch (URISyntaxException e) {
            return;
        }

        new webSocket(uri).connect();
    }
}

код клиента (реализация класса webSocket):

package com.example.chat;

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

import java.net.URI;
import java.nio.ByteBuffer;

public class webSocket extends WebSocketClient {

    webSocket(URI uri){
            super(uri);
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {
        send("Hello, it is me. Mario :)");
        System.out.println("new connection opened");
    }

    @Override
    public void onClose(int code) {
        System.out.println("closed with exit code " + code);
    }

    @Override
    public void onMessage(String message) {
        System.out.println("received message: " + message);
    }

    @Override
    public void onMessage(ByteBuffer message) {
        System.out.println("received ByteBuffer");
    }

    @Override
    public void onError(Exception ex) {
        System.err.println("an error occurred:" + ex);
    }
}
...