当前位置: 首页 > 知识库问答 >
问题:

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

岳正浩
2023-03-14

我的应用程序,使用套接字。io,无法连接到节点。js服务器。

服务器node.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);
    });

});

Android应用程序:

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

    socket.emit("sensorChanged", "argument1");

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

共有3个答案

董洲
2023-03-14

正在建立套接字。从Android设备到本地节点服务器的IO连接

确保你已经通过gradle安装了socket.io-client-java。

B.确保您已为设备启用internet访问。

<!-- AndroidManifest.xml -->

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">

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

    <application ...>
        ...
    </application>
</manifest>

C.确保运行服务器的端口已打开。

  • 在Windows 10上打开端口
  • 在Mac OSX 10上打开端口

D.使用计算机网络ip地址连接到本地服务器。

  • 打开一个终端

你想连接到超文本传输协议://

通过http://localhost:3000将不起作用,因为“localhost”指的是设备本身。

E.在设备上测试连接。

  • 在服务器上设置一个简单的路由GET/status,它只返回200
  • 导航到http://

F.现在,您应该能够将android socket客户端连接到节点socket服务器。

// Node.js App

let SocketIO = require('socket.io');

let ioServer = SocketIO(server);
console.log('Socket Server waiting for connections');

ioServer.on('connection', function (socket) {
    console.log(`Socket Client connected with id=${socket.id}`);
});

-

// Android App

import io.socket.client.Socket;
import io.socket.client.IO;
import io.socket.emitter.Emitter;
import android.util.Log;

public class SocketIO implements Runnable {
    @Override
    public void run() {

        final Socket socket;

        try {
            socket = IO.socket("http://<IPv4 Address>:<port>");

            socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

                @Override
                public void call(Object... args) {
                    Log.d("TAG", "Socket Connected!");
                    socket.disconnect();
                }

            });

        } catch(Exception e){
            Log.e("Error", e.toString());
        }

    }
}

夔光霁
2023-03-14

使用IP地址:10.0.2.2用于AVD

如果在同一网络上使用外部设备,请使用服务器机器的本地IP地址。

卫弘懿
2023-03-14

在将Android应用程序与Socket连接时,我也遇到了连接问题。IO与我的服务器在同一WiFi上(尽管当我尝试在浏览器中连接到同一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>
 类似资料:
  • 我的grails 2.1.0应用程序是在cloudfoundry中部署和运行的,使用mysql服务,昨天我做了一些更改,更新后无法再次运行。我没有对数据源进行任何更改。 通过查看tomcat日志,看起来数据库设置在部署时没有被覆盖,如文档中所述,并且存在一个异常消息“无法为连接URL“JDBC:h2:prodDb;MVCC=TRUE”创建类为“com.mysql.JDBC.driver”的JDBC

  • 问题内容: 我无法让我的Android应用程序连接到socket.io聊天服务器。我正在使用由Gottox创建的socket.io-java- client,可以在这里找到:https : //github.com/Gottox/socket.io-java- client 服务器在端口7000上本地运行。我使用的是Android模拟器,因此我使用的是10.0.2.2:7000来访问服务器。 任何

  • 问题内容: 在Fedora 10上编译。 我刚刚启动了我的第一个qt GUI应用程序。我使用了所有默认设置。 它只是一个简单的形式。它构建良好,没有任何错误。但是当我尝试运行该应用程序时。我收到以下消息: 感谢您的任何建议, 问题答案: 造成这种情况的一般原因如下: 未在环境中设置DISPLAY。 解决方案 : (不过,这似乎不是错误的那个,因为它说X试图连接到它。而且,它并不总是0.0,但大多数

  • 我有一个运行在windows机器上的远程FileZilla ftp服务器。ftp服务器需要通过TLS显式ftp。协议是FTP而不是SFTP。我无法更改此服务器的设置。我可以使用filezilla gui客户端连接到此服务器。 现在,我需要通过使用org的java应用程序连接到FileZilla服务器。阿帕奇。平民净: 但是当我运行上面的代码时,我得到: 说到: 任何想法如何连接到Filezilla

  • 我们有一个ASP经典Web应用程序在Azure应用服务中成功运行,该应用程序当前使用SQL服务器身份验证来访问AzureSQL数据库。我们需要将身份验证更改为Active Directory用户。我们设法使此应用程序从访问AzureSQL数据库的开发人员工作站工作,请参阅下面的工作和不工作。 *不适用于桌面,也不适用于Azure Conportail。打开"提供商=SQLOLEDB;服务器=tcp