2016-05-30 43 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語法。