Connectez le serveur websocket par adresse IP LAN
J'ai mis en place un websockets chat avec le but de l'apprentissage. Tout fonctionne mais je ne peux pas comprendre cette question.
Quand je approvisionnement 127.0.0.1
que l'adresse de la connexion sur le côté client, je peux accéder au serveur à partir de l'ordinateur qui l'héberge, mais quand j'ai changer l'adresse de la véritable adresse du réseau local de l'ordinateur hôte, je ne peux pas me connecter au serveur, même à partir de l'hôte lui-même. Voir:
Server = new FancyWebSocket('ws://127.0.0.1:9300');
Semble fonctionner mais uniquement de l'ordinateur qui héberge le serveur peut se connecter ( pour des raisons évidentes )
Server = new FancyWebSocket('ws://192.168.1.3:9300');
Pas d'ordinateurs peuvent se connecter. Je confirme 192.168.1.3
est l'adresse du réseau local de l'ordinateur hôte.
Quelle adresse dois-je mettre là-bas, alors que les autres ordinateurs de mon réseau local peut se connecter?
source d'informationauteur php_nub_qq
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème. Depuis qu'il a été une combinaison de deux réponses j'ai pensé que la seule chose juste à faire, c'était d'ajouter une autre réponse avec une explication.
@Mehran a suggéré, j'ai eu l'adresse du serveur mis en place comme
127.0.0.1
au lieu de l'adresse réseau. Après la modification que pour192.186.1.3
j'ai été en mesure de se connecter à partir du serveur lui-même, mais d'autres machines ont été incapable de se connecter. Puis, j'ai suivi les étapes décrites dans le guide fourni dans @vtortola réponse pour ajouter une nouvelle règle de trafic entrant dans le pare-feu du serveur afin de permettre le port de être utilisés.Donc, finalement, tout fonctionne maintenant, merci beaucoup de m'aider. rep +pour tout le monde!
Je suis sûr que cela est dû à la configuration de votre serveur WebSocket. Il doit être à l'écoute sur localhost (
127.0.0.1
) pour accepter des connexions entrantes dans lequel cas il ne réponds pas à ceux qui ont des192.168.1.3
.Puisque vous n'avez pas mentionné le serveur auquel vous êtes à l'aide de je ne peux pas être précis, mais en général il y a deux façons d'instancier un socket d'écoute, de la lier à une adresse IP spécifique ou
*
de lier ce que les adresses de système. Vous devez configurer au plus tard, si vous avez l'intention de répondre à des connexions au serveur de venir à partir de n'importe quel ordinateur de votre réseau local.Il ressemble à un Pare-feu/Politiques de problème pour moi.
Votre
TCP 80
pourrait être autorisé en raison de l'installation d'IIS s'ouvre, qui vous expliquera pourquoi la navigation web normale des œuvres. Mais vous essayez de vous connecter à laTCP 9300
c'est très rare qui est autorisé par défaut.Donner un essai à ce: Comment Ouvrir un Port dans le Pare-feu Windows 7 , et autoriser le port.
Voici quelques choses que vous pouvez supposer alors que la résolution de ce problème:
Si le service est en mesure de travailler sur 127.0.0.1 sur la même machine, vous pouvez supposer que le problème n'est pas dans le code ou la configuration de PHP
Si vous ne recevez pas un message d'erreur lorsque le serveur tente de se lier à
192.168.1.3:9003
vous pouvez supposer que le service fonctionne. Essayez d'ouvrir le Moniteur de Ressources pour voir si elle est réellement à l'écoute sur ce port pour confirmer. Pour ce faire, allez dans le Menu 'Démarrer' de Windows et tapez "Moniteur de Ressources" dans la "Rechercher les programmes et fichiers" boîte. Après l'ouverture, le Moniteur de Ressource, cliquez sur l'onglet 'résumé' et de trouver le nom de processus du serveur (typiquement 'php' si votre utilisation d'un CLI). Avec votre processus sélectionné, passez sur l'onglet Réseau et vous serez en mesure de voir si il est à l'écoute sur les ports à l'intérieur de la " Connexions TCP panneau. Cela va vous montrer ce que l'adresse et le port, elle est liste sur, ainsi que l'adresse distante et le port de tous les clients connectés au service.Si vous connaissez le serveur est en cours d'exécution, et vous savez qu'il est activement à l'écoute sur l'adresse et le port, il est très probablement un problème de firewall de Windows ou de votre routeur. Notez que même si
192.168.1.3
est l'adresse IP attribuée à votre interface, ce n'est pas une IP locale et toutes les communications vers et à partir de192.168.1.3
va encore passer par le pare-feu Windows, y compris si le fait d'être envoyé sur la même machine. Si votre déjà à ce point, je suggère fortement de vérifier votre pare-feu windows en premier. Si ce n'est pas le pare-feu Windows, vérifiez que votre routeur pour voir si c'est bloquant le port, et également de vérifier la redirection de port et d'autres pour vous assurer que le routeur n'est pas de perturber autrement. Nous pouvons probablement vous aider avec des problèmes de routeurs ici, mais votre routeur manuel à portée de main.HTTP est un service commun de port, donc il est très possible que le routeur ne bloque pas le port, et les fenêtres peuvent être ouvertes automatiquement si vous utilisez IIS. 9300 n'est pas un port commun de sorte qu'il est peu probable d'être ouvert par défaut dans n'importe quelle situation, à moins que votre défaut est "all-in", ce qui signifie que vous n'êtes pas à l'aide d'un pare-feu.
Une autre chose que vous pourriez essayer (si possible) est la fermeture de votre service HTTP et lier au port 80 à l'aide de votre Websocket service, ou si possible (et tout en faisant preuve de prudence) désactiver votre pare-feu windows à fond pour voir si ça marche assez longtemps pour se connecter.
En général, n'essayez pas d'atteindre votre adresse IP du réseau local à partir de votre propre machine. Il y a beaucoup de confusion des choses qui se produisent lors de la socket layer ici que je vais essayer de ne pas plonger trop loin dans. L'OS va sortir de sa façon de faire ce travail. Parfois. Je m'attends à ce que vous ne pouvez pas atteindre 192.168.1.3 (le serveur je suppose) à partir de lui-même. Il y a une traduction entre les adresses des points de terminaison lorsque vous faites ce qui complique tout.
Un commutateur de réseau ne sera généralement pas envoyer une image vers le bas d'un port elle reçoit simplement de, de sorte que ce que vous voyez lorsque vous exécutez la commande ping de votre IP locale dans l'invite de cmd est un bouclage de raccourci, l'OS est en train de prendre.
De ne pas pouvoir y accéder depuis une autre machine me fait soupçonner que le socket n'est pas lié correctement sur le serveur. Vérifiez que vous êtes déclarer explicitement le socket sur le serveur (adresse et le port), et que vous êtes en train liaison votre auditeur au socket. Également veiller à ce que l'adresse vous êtes une liaison est pour la carte réseau appropriée. Je vois cela tout le temps avec les ordinateurs portables ou les ordinateurs qui ont de multiples connecté cartes.
Malheureusement je ne peux pas être plus ciblée, avec ma réponse comme je suis pas familier avec ce qu'est un FancyWebSocket est ou comment il est construit.
Je peux vous aider si ses un système linux.
Si il n'y a pas de nom de serveur sur le réseau local, il est toujours possible de mettre en place une petite table de mappage d'adresses IP et les noms d'hôte de la machine dans le /etc/hosts fichier, généralement réservés pour le réseau local de stations.
Ce fichier est disponible même pendant les pannes de réseau ou lorsque les serveurs DNS sont inaccessible, mais uniquement pour être vraiment utile quand dupliqué sur toutes les machines sur le réseau. La moindre altération dans la correspondance exigera que le fichier soit mis à jour partout. C'est pourquoi, /etc/hosts généralement que contient la plus importante des entrées.
Ce fichier sera suffisante pour un petit réseau non connecté à Internet, mais avec 5 machines ou plus, il est recommandé d'installer un serveur DNS correcte.
Essayez d'ajouter l'ip:port' avec un nom d'hôte et de copier le modèle dans le fichier /etc/hosts dans tout le système.
Espère que ça résout le problème!