JavaOSC Server无法监听

来源:互联网 发布:软件源代码保密协议 编辑:程序博客网 时间:2024/06/12 20:40

JavaOSC不多介绍,是基于UDP的Open Sound Control (OSC) 协议在Java上实现的类库。


官网介绍的用法如下:

Sender:

<span style="font-size:14px;">OSCPort sender = new OSCPort();Object args[] = new Object[2];args[0] = new Integer(3);args[1] = "hello";OSCMessage msg = new OSCMessage("/sayhello", args); try {sender.send(msg); } catch (Exception e) { showError("Couldn't send"); }</span>

Receiver:

<span style="font-size:14px;">receiver = new OSCPortIn(OSCPort.defaultSCOSCPort());OSCListener listener = new OSCListener() {public void acceptMessage(java.util.Date time, OSCMessage message) {System.out.println("Message received!");}};receiver.addListener("/sayhello", listener);receiver.startListening();</span>

实际使用过程中,sender没问题,使用wireshark可以监测到PC收到的msg,但是receiver没反应,而且运行后自动终止。


就这个问题,纠结了好久,因为官方的sample就是这样。还有另外一个更详细的网站,介绍的也是这样。JavaOSC


后来查OSCPortIn的API,发现有一个run()方法:


public void run()Run the loop that listens for OSC on a socket until isListening becomes false.Specified by:run in interface java.lang.RunnableSee Also:Runnable.run()


加上之后,搞定!看来不能迷信官方的sample,也有疏漏的时候。


Server代码如下:

package com.example.OSCServer;import java.net.SocketException;import java.util.Date;import java.util.List;import com.illposed.osc.OSCListener;import com.illposed.osc.OSCMessage;import com.illposed.osc.OSCPortIn;public class Server {public static OSCPortIn receiver = null;public static void main(String[] args) {Thread thread = new Thread() {@Overridepublic void run() {GetIpAddress getAddress = new GetIpAddress();getAddress.run();System.out.println("Server is running.\nThe IP address is "+ getAddress.ipString);try {receiver = new OSCPortIn(Config.port);System.out.println("Server is running.");OSCListener listener = new OSCListener() {@Overridepublic void acceptMessage(Date arg0, OSCMessage arg1) {System.out.println("Message received!");List<Object> args = arg1.getArguments();System.out.println(args.get(0).toString());}};receiver.addListener("/msg", listener);receiver.startListening();if (receiver.isListening())System.out.println("Server is listening");receiver.run();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("error " + e);}}};thread.start();}}

参考资料:

http://www.illposed.com/software/javaosc.html

http://www.illposed.com/software/javaoscdoc/

https://wush.net/trac/lsu-idt/wiki/JavaOSC

0 0