Как подключить приложение android к node js серверу с помощью socket.io? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь подключить свое приложение android к nodeJS серверу, используя Socket.io, это код подключения от android:

final String URL = "http://192.168.0.103:3000";

try {
    mSocket = IO.socket(URL);
    mSocket.connect();
    mSocket.emit("message", "Hello");
    Toast.makeText(MainActivity.this, "Socket Connected!!",Toast.LENGTH_SHORT).show();
} catch (URISyntaxException e) {
    e.printStackTrace();
}

, ничего больше на android, Также к манифесту добавлено мое разрешение inte rnet, и я использую следующую библиотеку:

implementation 'com.github.nkzawa:socket.io-client:0.6.0'

На стороне сервера я также использую библиотеку Socket.io, но для nodeJS и соединение устанавливается как в следующих строках кода:

const app = express();
app.set("port", process.env.PORT || 3000);
let http = require("http").Server(app);
let io = require("socket.io")(http);

app.use(bodyParser.json());
app.use(function(req, res, next) {
    res.header("Content-Type", "application/json");
    next();
});

app.get("/", (req: any, res: any) => {
    res.send("hello world");
});

io.on("connection", function(socket: any) {
    console.log("a user connected");

    // whenever we receive a 'message' we log it out
    socket.on("message", function(message: any) {
        console.log(message);
    });
});

const server = http.listen(3000, function() {
    console.log("listening on *:3000");
});

Когда я пытаюсь подключиться с android, любая строка кода выполняется с успехом, даже сообщение Toast, но на сервере ничего , Кроме того, я сделал небольшой скрипт на nodeJS с использованием библиотеки "socket.io-client", для тестирования, где я пытаюсь подключиться к тому же серверу, и все работает нормально, соединение создано успешно, я получаю сообщение на терминал с сервера, и из сценария также у меня есть сообщение об успехе. следующий скрипт выглядит так:

var io = require("socket.io-client");
function checkSocketIoConnect(url, timeout) {
    return new Promise(function (resolve, reject) {
        var errAlready = false;
        timeout = timeout || 5000;
        var socket = io(url, { reconnection: false, timeout: timeout });
        // success
        socket.on("connect", function () {
            clearTimeout(timer);
            resolve();
            socket.close();
        });
        // set our own timeout in case the socket ends some other way than what we are listening for
        var timer = setTimeout(function () {
            timer = null;
            error("local timeout");
        }, timeout);
        // common error handler
        function error(data) {
            if (timer) {
                clearTimeout(timer);
                timer = null;
            }
            if (!errAlready) {
                errAlready = true;
                reject(data);
                socket.disconnect();
            }
        }
        // errors
        socket.on("connect_error", error);
        socket.on("connect_timeout", error);
        socket.on("error", error);
        socket.on("disconnect", error);
    });
}
checkSocketIoConnect("http://192.168.0.103:3000").then(function () {
    // succeeded here
    console.log("working");
}, function (reason) {
    // failed here
    console.log("why not: ", reason);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...