SocketServer ne fonctionne pas sur Linux
-
14-10-2019 - |
Question
J'ai écrit un script python simple en utilisant le SocketServer, il fonctionne bien sur Windows, mais quand je l'exécute sur une machine Linux à distance (Ubuntu), il ne fonctionne pas du tout .. Le script est comme ci-dessous:
#-*-coding:utf-8-*-
import SocketServer
class MyHandler(SocketServer.BaseRequestHandler):
def handle(self):
data_rcv = self.request.recv(1024).strip()
print data_rcv
myServer = SocketServer.ThreadingTCPServer(('127.0.0.1', 7777), MyHandler)
myServer.serve_forever()
Je télécharger sur la machine distante par SSH, puis exécutez la commande python server.py
sur la machine distante, et essayez d'accéder à xxx.xxx.xxx.xxx:7777/test
avec mon navigateur, mais rien est imprimé sur teminal de la machine à distance ... des idées?
Mise à jour. Le problème est résolu, il est un problème de pare-feu, vous remercie tous
La solution
Vous liez le serveur à 127.0.0.1
, l'adresse IP pour localhost. Cela signifie que le serveur accepte uniquement les connexions provenant de la même machine; il ne reconnaîtra pas les provenant d'une autre machine.
Vous devez soit lier à votre adresse IP externe, ou se lier à une adresse générique (à savoir ne se lient pas à une adresse IP particulière, juste un port). Essayez:
myServer = SocketServer.ThreadingTCPServer(('0.0.0.0', 7777), MyHandler)
Autres conseils
Vous liez à 127.0.0.1:7777 mais en essayant d'y accéder via les serveurs IP externe (je vais utiliser votre espace réservé - xxx.xxx.xxx.xxx). 127.0.0.1:7777 et xxx.xxx.xxx.xxx:7777 sont différents ports et peut être lié par différents processus IIRC.
Si cela ne résout pas, vérifiez votre pare-feu, de nombreux hôtes mis en place des pare-feu que tout bloc, mais la poignée vous êtes susceptible d'utiliser
Essayez avec telnet ou nc premier, telnet à votre adresse IP publique avec votre port et voir quelle réponse que vous obtenez. De plus, pourquoi accèdent test / du navigateur? Je ne vois pas cette partie dans le code. J'espère que vous avez pris soin de cela.