【问题标题】:Socket.IO connection to MacSocket.IO 连接到 Mac
【发布时间】:2019-12-27 13:52:12
【问题描述】:

我想在我的MacAndroid phone 之间创建一个简单的Socket.IO 连接。当我连接一个 android 模拟器(通过提供本地主机地址)时它可以正常工作,但是当我尝试连接一个真实设备(它在同一个 Wi-Fi 上)时它就不起作用了。是否有任何设置,我应该在我的 Mac 上启用以允许设备连接到它?

我的服务器代码:

var io = require('socket.io').listen(1337);

io.sockets.on('connection', function (socket) {
    console.log("Someone just connected!");

    // Echo back messages from the client
    socket.on('image', function (message) {
        console.log("Got image of length: " + message.length);
        socket.emit('image', message);
    });
});

我的 Android 客户端代码:

 private fun connectToServer() {
        try {
            socket = IO.socket("http://192.168.1.5:1337/") // 10.0.2.2 for Emulator
            socket.on("connect", connected)
            startConnection = SystemClock.elapsedRealtime()
            socket.connect()
        } catch (e: URISyntaxException) {
            Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show()
        }
    }

  private val connected: Emitter.Listener = Emitter.Listener {
        Log.d("AndroidClient", "Connection time: ${SystemClock.elapsedRealtime() - startConnection}")
    }

【问题讨论】:

  • 问题是您正在尝试通过 Wifi 访问您的计算机,如果您的计算机和移动设备在同一网络上,我猜这是您的计算机(服务器)或本地的防火墙问题防火墙路由器。
  • 我已经在 Flutter 中快速编写了类似的套接字客户端,并且......它可以工作。无论是在模拟器上还是在真实设备上。所以我的 Wi-Fi / Mac 设置或路由器等没有问题。代码中是否有错误?

标签: android node.js macos kotlin socket.io


【解决方案1】:

好的,过了一会儿,我解决了。看起来,Flutter 在底层添加了特殊的安全策略,我们必须在 Android 应用程序中自行添加,以允许通过 HTTP 而不是 HTTPS 进行连接。我使用了this 的解决方案2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    相关资源
    最近更新 更多