Вопрос

Я написал простой сценарий 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 с вашим портом и посмотрите, какой ответ вы получаете. Кроме того, почему доступ /тест из браузера? Я не вижу этой части в коде. Надеюсь, вы об этом позаботились.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top