【发布时间】:2019-12-27 13:52:12
【问题描述】:
我想在我的Mac 和Android 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