Socket.io 本地网络未连接

Socket.io local network not connecting

好的,我有以下设置:https://i.stack.imgur.com/4T9SX.jpg(如果下图太小)

问题是计算机 2 无法通过 socket.io 连接到计算机 1。

是的,我在计算机 2 中包含了 socket.io:

关于为什么计算机 2 无法通过 socket.io 连接到计算机 1 而 ping 可以的任何想法?

额外信息: - Socket.io 版本 1.4.5 - 两台电脑都是 windows 10 - 计算机 2 javascript 在 Phonegap 中 - 计算机 2 通过 wi-fi 连接,计算机 1 通过以太网连接

问候

编辑 来自客户端(计算机 2,启动时调用 init)的代码:

KerstAppHome.prototype.init = function(){
    var address = 'http://192.168.2.120:2017';
    console.log("Connecting to: " + address);
    this.socket = io.connect(address);
    this.socket.on('connect', this.proxy(function(){
        console.log("Connected to socket!");
        this.socketIsConnected = true;

        this.socket.on('disconnect', this.proxy(function(){
            console.log("Disconnected from socket!")
            this.socketIsConnected = false;
        }));
        this.socket.on('musicBlob', this.proxy(this.onMusicBlobReceived))
    }));

};

KerstAppHome.prototype.onMusicBlobReceived = function(musicBlob){
    console.log("RECEIVED SOMETHING");
    this.audioCtx.decodeAudioData(musicBlob).then(this.proxy(function(audioBuffer) {
        var source = this.audioCtx.createBufferSource();
        source.buffer = audioBuffer;
        source.connect(this.audioCtx.destination);
        source.start();
    }));
}

来自服务器(计算机 1)的代码:

var port = 2017;
var io = require('socket.io')(port);
console.log("Listening for socket connections on port " + port);

io.on('connection', function (socket) {
    console.log("Connection made!");
    socket.on('musicBlob', function(musicBlob){
        socket.broadcast.emit('musicBlob', musicBlob);
    });
});

来自浏览器(电脑1)的相关代码:

var socket = io.connect('http://localhost:2017');
var socketIsConnected = false;

socket.on('connect', function(){
    console.log("Connected to server!");
    socketIsConnected = true;
});
socket.on('disconnect', function(){
    console.log("Disconnected from server!")
    $scope.socketIsConnected = false;
});

我想知道为什么电脑2连服务器都连不上, console.log("Connected to socket!");甚至没有被称为

注意:如果我在计算机1上执行客户端(计算机2)的javascript,它工作正常,建立连接并接收数据!

注意:我用计算机 1(服务器)对其进行了测试,他的防火墙已关闭并且运行良好!

在图片中引用您的代码 - 您需要先检查以下内容

  1. 像 e.g.localhost:2017 这样的 nodejs 公开的 url 是什么 - 如果您已将其设置为 locahost - 您的节点服务器是 运行 作为本地主机主机名的 uri和无法从另一台机器访问的 ip 127.0.0.1 - 如果是这种情况,您需要将实际 ip 分配给节点进程 192.168.2.120(在您的情况下),然后您才能从另一台机器访问它
  2. 最好有一个命名空间到 socket,io 连接进程
  3. 您在使用 windows 机器吗?你需要打开网络和共享中心 - 如果你连接到 public 网络 - 连接永远不会工作 - 至少机器 运行 nodejs 服务器应该连接到家庭或办公室网络

如果您仍然遇到这个问题,您可以参考以下代码启动服务器

const http = require('http');
const url = '192.168.2.120';
var port = 2017;

console.log("Listening for socket connections on port " + port);

var requestListener = function (req, res) {
     res.writeHead(200);
     res.end('Hello, World!\n');
}

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

server.listen(port,url);

console.log('Server running at:', url+':'+port);

io.on('connection', function (socket) {
    console.log("Connection made!");
    socket.on('musicBlob', function(musicBlob){
    socket.broadcast.emit('musicBlob', musicBlob);
});

这应该适合你。

请检查您的 防火墙设置 ,或将其关闭几分钟再尝试,同时确保两台计算机都应连接到相同的 lan/wifi。和

允许 phonegap,事件 I/O v8 JavaScript 和安全套接字隧道协议 通过 Windows防火墙,