Я разрабатываю приложение для обмена сообщениями для 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);
}
}