PyOSC, питон. Зачем для получения oscserver IP-адрес?

В PyOSC вам необходим IP-адрес и порт, чтобы OSCServer мог получать информацию. И это не совсем имеет смысл для меня. Как и на Максе, вам нужно только объявить порт. Разве для получения вам всегда нужен только localhost как ip?

У меня есть приложение для Android, которое отправляет сообщение OSC в мою программу на моем компьютере. И проблема у меня сейчас на Python, мне всегда нужно вводить правильный IP-адрес моего компьютера, чтобы он работал. Это даже не сработает, если я изменю его на "localhost".

Насколько я понимаю, для получения udp вам нужно всего лишь открыть порт, а IP не имеет значения, потому что он всегда будет localhost.

class Rating_receiver:
    def __init__(self, ip = '192.168.0.3', port = 50010, num_emotion = 9, num_degree = 4):
        self.receive_address = ip, port
        self.num_emotion = num_emotion
        self.num_degree = num_degree
        self.choice = targetlist[0]
        self.degree = degreelist[0]

    def spawn(self):
        print"Server Created."
        self.receiveServer = OSC.OSCServer(self.receive_address) 
        self.receiveServer.addDefaultHandlers()

    def start(self):
        # Start OSCServer
        print "\nStarting OSCServer."
        self.emorating_oscServer = threading.Thread(target = self.receiveServer.serve_forever)
        self.emorating_oscServer.start()
        print "\nOSCServer established.

rating_receiver = Rating_receiver(ip = "localhost", port = 7110, num_emotion = 9, num_degree = 4)
rating_receiver.spawn()

Таким образом, он не будет работать, если я установлю ip в значение "localhost" (сервер может быть собран, но не сможет получать никаких сообщений), будет работать только при вводе действительного IP-адреса, например, "192.168.0.3". Спасибо

2 ответа

Вы действительно должны использовать "localhost".

Определите нужный порт, а затем отправьте сообщения с другого компьютера на тот, на котором выполняется этот код на его ip. Я предполагаю, что вы уже позаботились о таких вещах, как открытие порта, и вы знаете о разнице в объеме доступа от внешней сети к вашему маршрутизатору, но я перечислю это, чтобы прояснить это:

  • Если вы отправляете сообщения из одной сети, вам не нужно беспокоиться о портах. Просто найдите локальный IP для вашего компьютера. например, 192.168.X.XXX
  • Если вы отправляете сообщения извне, откройте публичный порт 50010 и перенаправьте его на свой внутренний ip 192.168.X.XXX на тот же порт 50010.

Вы должны определить функцию "default_handler" для обработки полученных сообщений, не уверен, что вы определили это и забыли показать его здесь:

def default_handler(addr, tags, stuff, source):
        print "SERVER: No handler registered for ", addr
return None

Вы также можете проверить пример для вашего синтаксиса OSCServer.

Ты пытался 127.0.0.1? это должно работать везде.

Я полагаю, что вы даете IP, который будет использовать сервер.

  • 127.0.0.1 в основном означает: "слушай только локальные соединения".

  • 192.168.0.3 (в вашем случае) означает: "прослушивать соединения из всей подсети"

  • 0.0.0.0 означает: "слушай связи отовсюду".

Другие вопросы по тегам