SocketServer не работает в Linux - PullRequest
       13

SocketServer не работает в Linux

2 голосов
/ 01 января 2011

Я написал простой скрипт на Python с использованием SocketServer, он хорошо работает в Windows, но когда я выполняю его на удаленной машине с Linux (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 с помощью моего браузера, но на терминале удаленного компьютера ничего не печатается ... есть идеи?

ОБНОВЛЕНИЕ: проблема решена, проблема с брандмауэром, спасибо вам всем.

Ответы [ 3 ]

6 голосов
/ 01 января 2011

Вы связываете сервер с 127.0.0.1, IP-адресом для localhost. Это означает, что сервер будет принимать только соединения, исходящие с одного компьютера; он не распознает тех, кто пришел с другой машины.

Вам необходимо либо привязать свой внешний IP-адрес, либо привязать к подстановочному адресу (т.е. не привязывать к какому-либо конкретному IP-адресу, а только к порту). Попробуйте:

myServer = SocketServer.ThreadingTCPServer(('0.0.0.0', 7777), MyHandler) 
2 голосов
/ 01 января 2011

Вы привязываетесь к 127.0.0.1:7777, но затем пытаетесь получить к нему доступ через внешний IP-адрес сервера (я буду использовать ваш заполнитель - xxx.xxx.xxx.xxx). 127.0.0.1:7777 и xxx.xxx.xxx.xxx:7777 являются различными портами и могут быть связаны различными процессами IIRC.

Если это не помогает, проверьте ваш брандмауэр, многие хосты устанавливают брандмауэры, которые блокируют все, кроме небольшого количества, которое вы, вероятно, будете использовать

0 голосов
/ 01 января 2011

Попробуйте сначала с помощью telnet или nc, telnet на ваш публичный ip через порт и посмотрите, какой ответ вы получите. Кроме того, почему доступ / тестирование из браузера? Я не вижу этой части в коде. Я надеюсь, что вы позаботились об этом.

...