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(服务器)对其进行了测试,他的防火墙已关闭并且运行良好!
在图片中引用您的代码 - 您需要先检查以下内容
- 像 e.g.localhost:2017 这样的 nodejs 公开的 url 是什么 - 如果您已将其设置为 locahost - 您的节点服务器是 运行 作为本地主机主机名的 uri和无法从另一台机器访问的 ip 127.0.0.1 - 如果是这种情况,您需要将实际 ip 分配给节点进程 192.168.2.120(在您的情况下),然后您才能从另一台机器访问它
- 最好有一个命名空间到 socket,io 连接进程
- 您在使用 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防火墙,
好的,我有以下设置: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(服务器)对其进行了测试,他的防火墙已关闭并且运行良好!
在图片中引用您的代码 - 您需要先检查以下内容
- 像 e.g.localhost:2017 这样的 nodejs 公开的 url 是什么 - 如果您已将其设置为 locahost - 您的节点服务器是 运行 作为本地主机主机名的 uri和无法从另一台机器访问的 ip 127.0.0.1 - 如果是这种情况,您需要将实际 ip 分配给节点进程 192.168.2.120(在您的情况下),然后您才能从另一台机器访问它
- 最好有一个命名空间到 socket,io 连接进程
- 您在使用 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防火墙,