PyOSC,Python。为什么oscserver需要IP地址来接收?

2024-10-03 21:34:18 发布

您现在位置:Python中文网/ 问答频道 /正文

在PyOSC中,OSCServer需要IP和端口才能接收信息。这对我来说没什么意义。和Max一样,你只需要声明端口。不是为了接收你总是需要本地主机作为ip吗?在

我有一个android应用程序,它向我电脑上的python程序发送OSC消息。我现在遇到的问题是在Python上,我总是需要输入计算机的正确IP才能正常工作。如果我把它改成“localhost”也不行。在

据我所知,对于udp-receive,您只需要打开一个端口,而IP并不重要,因为它总是本地主机。在

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”。 谢谢


Tags: 端口selfiplocalhostportdefnumreceive
2条回答

您确实应该使用“localhost”。在

定义所需的端口,然后将消息从另一台计算机发送到在其ip上运行此代码的计算机。我想您已经注意到了诸如端口打开之类的事情,并且您知道从外部网络到路由器内部的访问范围的不同,但是我将列出它来说明:

  • 如果您从同一个网络发送消息,则不需要担心端口。只需找到计算机的本地ip即可。e、 g.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语法签出一个示例。在

你试过127.0.0.1吗?它应该在任何地方都有效。在

我相信你给的IP服务器将使用。在

  • 127.0.0.1基本意思是:“只监听本地连接”。

  • 192.168.0.3(在您的例子中)的意思是:“监听整个子网的连接”

  • 0.0.0.0的意思是:“监听来自任何地方的连接。”

相关问题 更多 >