2016-11-13 2 views
2

D'accord, j'ai la configuration suivante: https://i.stack.imgur.com/4T9SX.jpg (Si l'image ci-dessous est trop petit)Socket.io réseau local ne se connecte pas

enter image description here

Le problème est que l'ordinateur 2 ne peut pas se connecter avec socket.io à ordinateur 1.

enter image description here

Oui i inclus dans l'ordinateur socket.io 2:

enter image description here

Des idées sur pourquoi l'ordinateur 2 ne peut pas se connecter à l'ordinateur 1 avec socket.io alors que ping peut?

Informations supplémentaires: - Version 1.4.5 Socket.io - Les deux ordinateurs sont Windows 10 - Ordinateur 2 javascript est Phonegap - Ordinateur 2 se connecte via wi-fi, ordinateur 1 via Ethernet

Salutations

EDIT code du client (ordinateur 2, init est appelé au démarrage):

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(); 
    })); 
} 

code de serveur (ordinateur 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); 
    }); 
}); 

code approprié du navigateur (ordinateur 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; 
}); 

Je veux savoir pourquoi l'ordinateur 2 ne peut même pas se connecter au serveur, Le fichier console.log ("Connecté à la socket!"); n'est même pas appelé

NOTE: Si j'exécute le javascript du client (ordinateur 2) sur l'ordinateur 1, cela fonctionne parfaitement, se connecte et reçoit des données! REMARQUE: Je l'ai testé avec l'ordinateur 1 (serveur), son pare-feu s'est éteint et cela a fonctionné parfaitement!

+0

Nous devons voir le code réel pour les deux ordinateurs (collé sous forme de texte, pas d'images) en cette question. – jfriend00

+0

Vous utilisez un chemin personnalisé avec 'io.connect()' dans le client, mais vous n'avez pas spécifié que vous écoutiez ce chemin personnalisé sur votre serveur. Soit supprimer le chemin personnalisé du client (je ne vois aucune raison pour cela) ou ajouter le chemin personnalisé à la configuration de votre serveur comme indiqué ici: http://stackoverflow.com/questions/29511404/connect-to-socket-io-server -with-specific-path-and-namespace – jfriend00

+0

Pouvez-vous essayer un autre port? Est-il peut-être bloqué par les paramètres du pare-feu? – user835611

Répondre

2

s'il vous plaît vérifier paramètres de pare-feu, ou l'éteindre pendant quelques minutes et que d'essayer, assurez-vous également que les deux ordinateurs doivent être connectés avec même lan/wifi. et

permettent PhoneGap, Evented E/S pour v8 JavaScript et Secure Socket Tunneling Protocol via Windows Firewall,

+0

Cela l'a réparé! Merci! J'espère que votre réponse aidera beaucoup de gens avec ce problème: D – ErikBrandsma

+0

@ErikBrandsma oui j'espère que cela aidera d'autres personnes. –

1

En référence à votre code dans l'image - vous devez vérifier les choses suivantes premiers

  1. Quelle est l'URL exposée pour vos nodejs comme eglocalhost: 2017 - si vous avez défini comme locahost - votre Le serveur de noeud s'exécute en tant qu'uI de nom d'hôte de localhost et ip 127.0.0.1 qui ne peut pas être accédé d'une autre machine - si c'est le cas vous devez assigner l'IP réel au processus de noeud 192.168.2.120 (dans votre cas) seulement alors vous pouvez accéder à partir d'une autre machine
  2. son bon d'avoir un espace de noms à la socket, processus de connexion io
  3. utilisez-vous Windows machine?vous devez ouvrir le réseau et le centre de partage - si vous êtes connecté au réseau public - les connexions ne fonctionnera jamais - au moins la machine en marche serveur nodejs doit être connecté à la maison ou d'un réseau bureau

si vous êtes face à stll la question vous pouvez vous référer au code suivant pour démarrer le serveur

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); 
}); 

Cela devrait fonctionner pour vous.