PyOSC,python。为什么oscserver需要IP地址才能接收?

时间:2016-05-30 03:25:19

标签: android python osc

在PyOSC中,您需要IP和端口以供OSCServer接收信息。这对我来说没有多大意义。与Max一样,您只需要声明端口。是不是因为接收你总是只需要localhost作为ip?

我有一个Android应用程序,它将OSC消息发送到我的计算机上的python程序。我现在遇到的麻烦就是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 个答案:

答案 0 :(得分:0)

你试过127.0.0.1吗?它应该无处不在。

我相信你正在提供服务器将使用的IP。

  • 127.0.0.1基本上意味着:“只听本地连接”。

  • 192.168.0.3(在您的情况下)表示:“侦听来自整个子网的连接”

  • 0.0.0.0表示:“倾听来自世界各地的联系。”

答案 1 :(得分:0)

你确实应该使用“localhost”。

定义所需的端口,然后将其他计算机上的消息发送到其ip上运行此代码的消息。我想你已经处理好了端口打开等事情,你知道从外部网络到路由器内部的访问范围的差异,但我会列出它以使其清楚:

  • 如果您要从同一网络发送邮件,则无需担心端口问题。只需找到您计算机的本地IP。例如192.168.X.XXX
  • 如果您是从外部发送消息,请打开公共端口50010并将其重定向到同一端口50010上的内部IP 192.168.X.XXX。

您必须定义“default_handler”函数来处理收到的消息,不确定您是否定义了它并忘记在此处显示:

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

您可能还想查看OSCServer语法的示例。