2016-08-14 1 views
0

J'ai effectué plusieurs parties dans VB avec succès et je suis maintenant prête à passer à la phase de jeu multijoueur. Cependant, comme je n'ai aucune expérience dans ce domaine et que je peux trouver peu sur Internet pour m'aider, j'ai un problème que je ne trouve pas la solution. J'utilise VB comme langue, bien que j'aie mis c# dans les balises parce que je peux comprendre des solutions l'employant à la place.Utilisation de la classe TCPClient: 'Aucune connexion n'a pu être établie car la machine cible l'a refusée'

J'ai essayé de faire un jeu à 2 joueurs en utilisant TCP pour se connecter entre les joueurs.

Il utilise la classe TcpListener pour le code du serveur et la classe TcpClient pour le code client et assez utilise beaucoup le modèle qui donne la documentation e: server, client.

Le serveur:

server = New TcpListener(IPAddress.Any, 48000) 

Et le client:

Dim client As New TcpClient() 
client.Connect(hostAddr, 48000) 

Je teste le code à l'aide à la fois serveur et client sur la même machine. Le code fonctionne parfaitement lorsque je fais hostAddr l'adresse IP locale de mon ordinateur et je peux envoyer des messages avec succès entre les deux programmes.

Toutefois, lorsque je donne hostAddr mon adresse IP externe, le code client ne fonctionne pas à cause de l'erreur: "Aucune connexion n'a pu être établie car la machine cible l'a refusée activement".

J'ai essayé les éléments suivants qui ne fonctionne pas pour moi:

  1. Arrêt du pare-feu

  2. Changer mes paramètres du routeur pour autoriser les connexions TCP via tous les ports

J'utilise Windows 10 dans une machine virtuelle (j'espère que cela n'affecte pas les choses). Pourrais-je avoir des suggestions sur ce qui pourrait mal se passer et sur la façon dont je devrais déboguer pour savoir si elles sont vraies? En outre, je voudrais savoir si je rencontrerais des problèmes similaires si je devais demander à un ami de lancer le client sur son ordinateur (qui n'est pas sur le même réseau).

Répondre

1

Vous devez vérifier les paramètres du pare-feu sur le client et le serveur pour commencer. La plupart des pare-feu bloquent toute connexion entrante à un ordinateur, et vous devrez ouvrir le port que vous voulez manuellement. Donc, pour voir si c'est le problème, vous pouvez temporairement désactiver les pare-feu sur les deux.

Le problème de réseau suivant pourrait être votre configuration HyperV. Je crois par défaut que HyperV crée un commutateur de réseau «privé», ce qui signifie que chaque OS invité ne peut parler qu'à lui-même. Vous pouvez créer un commutateur pour que les machines virtuelles puissent communiquer entre elles, mais pour le développement je choisis généralement le commutateur qui expose la carte réseau de l'hôte et tout invité utilisant ce commutateur hyperv sera considéré comme un autre ordinateur sur votre réseau, comme si ils étaient physiques.Tout dépend bien sûr de la façon dont vous spécifiez le serveur; localhost devrait ignorer la plupart de ces problèmes, mais si vous utilisez le nom d'hôte, il se peut qu'il essaie d'utiliser la carte réseau pour se connecter et se reconnecter, auquel cas ce qui précède peut entrer en jeu.

+0

J'utilise la même machine pour l'instant, il suffit donc de désactiver le pare-feu (pour la 1ère partie)? – Shuri2060

+0

En outre, j'utilise VirtualBox pour ma machine virtuelle et je pensais que ce serait la même chose que d'utiliser un ordinateur réel car il peut se connecter à Internet. Je suppose que ce n'est pas vrai? – Shuri2060

+0

Merci! J'ai résolu le problème en utilisant la redirection de port à travers la machine virtuelle - s'avère que c'était effectivement le problème – Shuri2060