使用Matlab R2012a中的pnet以格式osc(开放声音控制)发送udp数据包

时间:2013-03-07 15:04:02

标签: matlab udp osc

我在MATLAB中有关于udp数据包的问题。我一直在使用oscsend.m脚本将udp数据包发送到其他应用程序。 http://www.mathworks.fr/matlabcentral/fileexchange/31400-send-open-sound-control-osc-messages/content/oscsend.m 它的工作正常。但是,现在我需要使用TCP / UDP / IP工具箱2.0.6 http://www.mathworks.de/matlabcentral/fileexchange/345-tcpudpip-toolbox-2-0-6中的pnet函数 因为我无法再访问Matlab中的仪器控制工具箱,而oscsend则使用它。

我在网上查找了答案,甚至联系了作者,到目前为止没有运气。即使这个问题看似微不足道,但我无法使其发挥作用。

通常,Instrument Control工具箱的用法是:

u = udp('127.0.0.1', 12345) %12345 being the port
fopen(u)
oscsend(u, /test, 'f', 1.05) %"f" indicating a floating number 

但现在没有udp或fopen,我试图像这样使用pnet

%write data to UDP
data = [oscstr(path) types data];
sock=pnet('udpsocket',12345) %it returns 0, a sign that the socket is working
%however when I try to send the oscsend signal through this socket nothing happens
pnet(sock, 'writepacket' data) %data being the output of oscsend 

我也试过没有运气将pnet功能集成到oscsend,但是我无法收到信号,(我正在使用另一个MATLAB实例,它收到了从前面提到的端口发送的数据)。 这就是我在oscsend中所做的,但没有一个工作

%write data to UDP
data = [oscstr(path) types data];
%pnet(u, 'writepacket', data, '127.0.0.1', 12345 );%
%pnet u 'write' data %
%pnet(u,'write',data, '127.0.0.1', 12345 )
%pnet(u,'write',data, '127.0.0.1', 12345 ) %returned value?
%pnet(0,'write',data, '127.0.0.1', 12345 ) %
%sock = pnet('udpsocket',12345 ); %
%pnet(sock,'write', data, '127.0.0.1', 12345 )

感谢所有人提前花时间阅读本文。 最好。 马里奥。

3 个答案:

答案 0 :(得分:1)

我不清楚您要将数据发送到哪个UDP端口,以及您用来监视和测试代码的过程类型。涉及两个端口...一个是您要绑定的本地端口(这是'udpsocket'的参数),另一个端口是数据包的目标端口,与目标主机一起提供。

在我看来,Instrument Control Toolbox语法在创建过程中需要目标主机名和端口。如果您愿意,它允许您将本地端口指定为可选参数。相反,pnet('udpsocket')接受本地端口。您应该在第一组代码中注意到没有任何内容指定目标主机,这会让您产生怀疑......如果您在pnet.m的UDP文档中继续阅读,您会看到还有另一个功能:{{1}将UDP套接字“连接”到主机/端口对,以便在执行writepacket时可以省略主机名/端口。

因此,我认为这与原始的Instrument Control Toolbox代码相同:

pnet(sock, 'udpconnect', 'hostname', port)

你应该总是使用'​​writepacket'来实现UDP,而不是'写'。请注意,您可以像我上面列出的那样执行'udpconnect',或者您可以为每个writepacket提供主机名/端口,就像您尝试的那样。

我无法从你的问题中找出6351是如何进入的,因为你的参考代码中从未出现过。

答案 1 :(得分:1)

btw,还有oscmex,一个基于liblo的库,允许您直接从/在matlab内发送/接收OSC消息。

答案 2 :(得分:0)

感谢我的主管,如果您需要使用pnet通过oscsend.m发送udps,那么这里是代码 http://www.mathworks.fr/matlabcentral/fileexchange/31400-send-open-sound-control-osc-messages/content/oscsend.m 只需在oscsend.m

的末尾添加以下代码
%write data to UDP
data = [oscstr(path) types data];
pnet(u, 'write', data)
pnet(u, 'writepacket', '127.0.0.1', 12345); %127.0.0.1 being the IP and 12345 the port