【问题标题】:sending udp packets in format osc (Open sound control) using pnet in Matlab R2012a在 Matlab R2012a 中使用 pnet 以 osc(开放声音控制)格式发送 udp 数据包
【发布时间】:2013-03-07 15:04:01
【问题描述】:

我有一个关于 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 功能 因为我不再可以访问 oscsend 使用的 Matlab 中的仪器控制工具箱。

我在网上查找答案,甚至联系了作者,但到目前为止都没有成功。即使问题看起来微不足道,我也无法解决问题。

仪器控制工具箱的用法通常是:

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 )

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

【问题讨论】:

  • 编辑:在我使用 6351 端口发送和接收的原始代码中,为了显示目的,我现在将其更改为 12345,当我第一次提问时输入错误

标签: matlab udp osc


【解决方案1】:

我不清楚您要将数据发送到哪个 UDP 端口,以及您使用哪种进程来监控和测试代码。涉及两个端口...一个是您要绑定到的本地端口(即“udpsocket”的参数),另一个端口是数据包的目标端口,与目标主机一起给出。

在我看来,仪器控制工具箱语法在创建过程中需要目标主机名和端口。如果您愿意,它允许您将本地端口指定为可选参数。相反, pnet('udpsocket') 采用本地端口。您应该注意到在您的第一组代码中没有指定目标主机,这会让您产生怀疑...如果您继续阅读 pnet.m 的 UDP 文档,您会发现还有另一个函数:pnet(sock, 'udpconnect', 'hostname', port),它将 UDP 套接字“连接”到主机/端口对,以便在执行 writepacket 时可以省略主机名/端口。

因此,我认为这与您的原始仪器控制工具箱代码等效:

sock=pnet('udpsocket',1237);  % Does local port matter?  You haven't said...
pnet(sock, 'udpconnect', '127.0.0.1', 12345); % Destination port
pnet(sock, 'writepacket', data);

对于 UDP,您应该始终使用“writepacket”,而不是“write”。请注意,您可以按照我上面列出的方式执行“udpconnect”,也可以按照您尝试的方式为每个 writepacket 提供主机名/端口。

我无法从您的问题中弄清楚 6351 是如何输入的,因为它从未出现在您的参考代码中。

【讨论】:

  • 感谢我的主管制作oscsend的脚本
【解决方案2】:

顺便说一句,还有oscmex,一个基于liblo 的库,允许您直接从/在matlab 中发送/接收OSC 消息。

【讨论】:

    【解决方案3】:

    感谢我的主管,如果您需要使用 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多