首页 > 解决方案 > Android 应用程序不通过 socket.io 连接

问题描述

Android 应用程序不通过 socket.io 连接,但通过浏览器一切都很好。如果我通过浏览器 http://localhost:3000 访问,它可以工作,但是当我运行 android 应用程序时没有任何反应,也没有错误消息。注意:我正在使用 nodejs。

MainActivity.java

package com.security.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import java.net.URISyntaxException;
import io.socket.client.IO;
import io.socket.client.Socket;

public class MainActivity extends AppCompatActivity {

    public Socket socket;

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

        //I created a ddns domain for external access directing to the nodejs 
        server port 3000
        try {
            socket = IO.socket("http://my_domain_ddns:3000");
            socket.connect();

        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
}

节点.js

const express = require('express');
const path = require('path');

const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);    

app.use(express.static(path.join(__dirname, 'public')));    

app.set('views', path.join(__dirname, 'public'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');    

app.use('/', (req, res) => {
    res.render('index.html');
});    

io.on('connection', socket => {

    console.log(`Socket conectado: ${socket.id}`);

});

server.listen(3000);

索引.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="with=device-with, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Chat</title>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.3/socket.io.js"></script>

    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <form id="chat">
        <input type="text" name="username" placeholder="Digite seu usuario">
        <div class="messages"></div>
        <input type="text" name="message" placeholder="Digite sua mensagem">
        <button type="submit">Enviar</button>
    </form>

    <!-- Fazendo a conexao do front com o socket -->
    <script type="text/javascript">     
        var socket = io('http://my_domain_ddns:3000');
    </script>

</body>
</html>

我已经更正了 index.html var socket = io('http://my_domain_ddns:3000'); 中的 url

标签: node.jsandroid-studio

解决方案


Change localhost in your android by the public IP of your router.

Do a port forwarding from your router to your server.

Check that your server has the port where you do your forwarding is open.

This video video give more explanation.


推荐阅读