Socketserver funktioniert nicht unter Linux
-
14-10-2019 - |
Frage
Ich habe ein einfaches Python -Skript mit dem SocketServer geschrieben. Es funktioniert gut unter Windows, aber wenn ich es auf einem Remote -Linux -Computer (Ubuntu) ausführe, funktioniert es überhaupt nicht. Das Skript ist wie unten:
#-*-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()
Ich lade es mit SSH auf den Remote -Computer hoch und führe dann den Befehl aus python server.py
auf dem Remote -Computer und versuchen Sie zuzugreifen xxx.xxx.xxx.xxx:7777/test
Mit meinem Browser, aber nichts wird auf dem Teminal der Fernmaschinen gedruckt ... irgendwelche Ideen?
Update: Problem gelöst, es ist ein Firewall -Problem, danke euch allen.
Lösung
Sie binden den Server an an 127.0.0.1
, die IP -Adresse für Localhost. Dies bedeutet, dass der Server nur Verbindungen akzeptiert, die aus derselben Maschine stammen. Es wird keine erkennen, die von einer anderen Maschine kommen.
Sie müssen entweder an Ihre externe IP -Adresse binden oder an eine Wildcard -Adresse binden (dh nicht an eine bestimmte IP -Adresse, sondern nur an einen Port). Versuchen:
myServer = SocketServer.ThreadingTCPServer(('0.0.0.0', 7777), MyHandler)
Andere Tipps
Sie binden an 127.0.0.1:7777, aber dann versuchen Sie, über die externe IP der Server darauf zuzugreifen (ich werde Ihren Platzhalter verwenden - xxx.xxx.xxx.xxx). 127.0.0.1:7777 und xxx.xxx.xxx.xxx:7777 sind Verschiedene Ports und kann an verschiedene Prozesse gebunden werden.
Wenn das nicht repariert wird, überprüfen Sie Ihre Firewall, viele Hosts richten Firewalls ein, die alles außer der Handvoll blockieren, die Sie wahrscheinlich verwenden werden
Versuchen Sie es mit Telnet oder NC zuerst, Telnet zu Ihrer öffentlichen IP mit Ihrem Port und sehen Sie, welche Antwort Sie erhalten. Warum greifen auf /testen Sie vom Browser auf /testen Sie? Ich sehe diesen Teil im Code nicht. Ich hoffe, Sie haben sich darum gekümmert.