2016-05-30 45 views
0

在PyOSC中,您需要为OSCServer同时接收IP和端口信息。这对我来说并不合适。和Max一样,你只需要声明端口。是不是为了接收你总是只需要localhost作为ip?PyOSC,python。为什么oscserver需要IP地址来接收?

我有一个Android应用程序发送OSC消息到我的电脑上的python程序。我现在遇到的麻烦是Python,我总是需要输入正确的IP才能工作。如果将其更改为“本地主机”,它甚至不会工作。

据我的理解,对于udp接收,你只需要打开一个端口,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”。 谢谢

回答

0

你试过127.0.0.1?它应该到处工作。

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

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

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

  • 0.0.0.0表示:“听来自世界各地的连接”

+1

我做了,不幸的是它不起作用。现在我的解决方案是使用ipAddr = socket.gethostbyname(socket.getfqdn())来获取IP。也许我可以试试0.0.0.0 –

0

你应该确实使用“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语法。