SocketServer не работает на Linux
-
14-10-2019 - |
Вопрос
Я написал простой сценарий Python с помощью SocketServer, он хорошо работает на Windows, но когда я выполняю его на удаленном Minux Machine (Ubuntu), он вообще не работает .. Сценарий похож на ниже:
#-*-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()
Я загружаю его на удаленную машину от SSH, а затем запускаю команду python server.py
на удаленной машине и попытайтесь получить доступ к xxx.xxx.xxx.xxx:7777/test
С моим браузером, но ничто не напечатано на пустой машине ... есть идеи?
Обновление: проблема решена, это проблема брандмауэра, спасибо всем.
Решение
Вы привязываете сервер к 127.0.0.1
, IP -адрес для Localhost. Это означает, что сервер примет только подключения, происходящие из одной и той же машины; Он не узнает, что из другой машины.
Вам необходимо либо привязать к внешнему IP -адресу, либо привязать к адресу подстановочного знака (т.е. не связывайтесь с каким -либо конкретным IP -адресом, просто портом). Пытаться:
myServer = SocketServer.ThreadingTCPServer(('0.0.0.0', 7777), MyHandler)
Другие советы
Вы привязываете к 127.0.0.1:7777, но затем пытаетесь получить к нему доступ через внешний IP -адрес сервера (я использую ваш заполнитель - XXX.XXX.XXX.XXX). 127.0.0.1:7777 и xxx.xxx.xxx.xxx:7777 разные порты и может быть связан разными процессами IIRC.
Если это не исправляет, проверьте брандмауэр, многие хосты настроили брандмауэры, которые блокируют все, кроме горстки, которую вы, вероятно, будете использовать
Попробуйте сначала с Telnet или NC, Telnet для вашего общедоступного IP с вашим портом и посмотрите, какой ответ вы получаете. Кроме того, почему доступ /тест из браузера? Я не вижу этой части в коде. Надеюсь, вы об этом позаботились.