Socket de connexion sur internet en Python?
J'ai créé une base de client-serveur socket programme en Python 2.7.x et il fonctionne très bien sur le même réseau, même sur des machines différentes, mais quand je lance le serveur et le client sur les différents réseaux(serveur de mon ami réseau tout client sur le mien), il ne retourne pas d'erreur et ne cesse de les d'attente. Je ne comprends juste pas comment faire pour déboguer le code. Je suis en utilisant le port 80 en tuant tous les services sur le port 80. J'ai aussi fait de la redirection de port sur le port 80 sur les deux machines.
Mes codes est comme suit:
client.py
import socket
s = socket.socket()
host = '103.47.59.130'
port = 80
s.connect((host, port))
while True:
print "From Server: ", s.recv(1024) #This gets printed after sometime
s.send(raw_input("Client please type: "))
s.close()
server.py
import socket
s = socket.socket() # Create a socket object
host = '192.168.0.104' #private ip address of machine running fedora
port = 80
s.bind((host, port))
s.listen(5)
c, addr = s.accept()
print 'Got connection from', addr #this line never gets printed
while True:
c.send(raw_input("Server please type: "))
print "From Client: ", c.recv(1024)
c.close()
Il parfois de sortie **à Partir du Serveur: * * * mais n'est pas d'envoyer un message d'avant en arrière.
PS: j'ai cherché sur Stack Overflow plus tôt, mais je ne trouve rien de pertinent.
J'ai essayé en désactivant le pare-feu de windows. Nous n'avons aucune façon de l'éteindre sur Fedora?
Pare-feu, ou NAT? Le transfert de ports devrait corriger NAT. Pourrait être une erreur de dépassement de délai, regarde stackoverflow.com/a/2721734/5276801 pour résoudre ce problème
Toutes les chaînes d'accepter tous les
docs.fedoraproject.org/en-US/Fedora/11/html/Security_Guide/... pour fedora pare-feu
OriginalL'auteur Sanyam Jain | 2016-02-13
Vous devez vous connecter pour publier un commentaire.
Utiliser cette logiciel pour mettre en œuvre la transmission de port. Je vous recommande d'utiliser un autre port de votre serveur, dire 5006, pour éviter les problèmes liés à l'utilisation d'un très couramment utilisés port 80. Fondamentalement, le logiciel fonctionne comme ceci:
Donc tout ce que votre client a à faire est d'envoyer des données à l'adresse IP publique de votre serveur, en particulier pour le port 5001. Ces données seront bien sûr d'abord arriver à votre routeur, ce qui va se comporter comme configuré et avant tout à votre port du serveur 5006. Tout cela ne fonctionne que si votre passerelle internet prend en charge la redirection de port.
Client:
Serveur:
Exactement. Vos ports externes dont la carte interne, par défaut. Vous pouvez faire tout port externe de la carte à n'importe quel intérieur; être sûr d'éviter les ports inférieurs à 1000.
Vrai, ces ports sont utilisés par certains services. J'ai aussi trouvé quelque chose monopolisant le port 9000 j'ai pensé que c'était étrange.
OriginalL'auteur TisteAndii
Vous devez utiliser votre adresse IP publique ou
0.0.0.0
dans votre serveur, et assurez-vous que votre modem/routeur autorise les connexions entrantes sur le port spécifié (généralement appelé la Redirection de Port).Espère que cela aide!
Oui. À l'aide de
192.168.0.104
va juste écouter pour les connexions LAN. Utilisation de votre adresse IP publique ou0.0.0.0
.Le serveur doit utiliser
0.0.0.0
de sorte que le code peut s'exécuter sur de nombreuses machines, mais si192.168.0.104
est en fait le serveur de la machine d'adresse, ça marche toujours. Le serveur est derrière un NAT et comme l'a souligné ici, vous devez configurer la redirection de port sur le NAT pour envoyer le port 80 pour192.168.0.104
. Votre ami FAI peut bloquer les demandes de connexion, ou peut-être juste 80 précisément, l'expérience avec d'autres.J'ai essayé d'utiliser 0.0.0.0 Serveur mais toujours en attente pour le client de se connecter. J'ai changer le port 8009 aussi, ai-je besoin de faire quelque chose d'autre?
Avez-vous ouvert le port 8009 dans les paramètres de votre modem?
OriginalL'auteur cdonts
Semble que vous avez besoin pour effectuer le dépannage de base de réseau. Votre description dit vous pouvez vous connecter à d'autres ordinateurs sur votre réseau, mais pas une machine sur un autre réseau. Vous essayez peut-être le même genre de tests sur la machine sur l'autre réseau: peut-on se connecter à d'autres machines sur son propre réseau, il peut se connecter à d'autres machines de son réseau.
Certains outils qui sont très utiles incluent ping, tracepath, tcpdump, et nc (netcat).
En fin de compte, si vous pouvez établir la connexion avec netcat, vous pouvez supposer que le problème est avec votre code, mais si vous ne pouvez pas, vous pouvez essayer de trouver le problème de réseau.
OriginalL'auteur dancancode