Android socket.io 应用程序无法连接到 node.js 服务器

Que*_*eUe 5 android node.js socket.io

我的应用程序使用 socket.io,无法连接到 node.js 服务器。

服务器节点.js

var app = require('http').createServer()
var io = require('socket.io')(app);

app.listen(1000);

io.on('connection', function (client) { 

  client.name = client.remoteAddress + ':' + client.remotePort;
  console.log(client.name + ' connected!'); 

    client.on('sensorChanged', function (data) {
        console.log("HERE");
        console.log(data);
    });

});
Run Code Online (Sandbox Code Playgroud)

安卓应用:

    SocketIO socket = new SocketIO();
    try {
        socket.connect("http://localhost:1000/", this);
        txtView.setText("connected");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    socket.emit("sensorChanged", "argument1");
Run Code Online (Sandbox Code Playgroud)

当我连接到服务器时,服务器不会说“socket.name connected”,也不会发出事件“sensorChanged”。问题出在哪儿?

Luk*_*alj 5

当我在同一个 WiFi 上将带有 Socket.IO 的 Android 应用程序与我的服务器连接时,我也遇到了连接问题(尽管当我尝试连接到浏览器中的相同 URL 时连接工作正常)。

我在这里找到了解决方案:https : //stackoverflow.com/a/50834600/9560885

简而言之,尝试将此行添加到您的 AndroidManifest.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)


Igo*_*daš -1

您正在从 android 本地计算机上定位 Node 服务器。由于节点不在 Android 上运行(据我所知),我猜您想将服务器定位到您的电脑上。您应该使用本地网络中电脑的网络地址,而不是 localhost(在此 Android 代码中指手机/平板电脑本身)。