Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MatlabR2012A中使用pnet以osc(开放式声音控制)格式发送udp数据包_Matlab_Udp_Osc - Fatal编程技术网

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

在MatlabR2012A中使用pnet以osc(开放式声音控制)格式发送udp数据包,matlab,udp,osc,Matlab,Udp,Osc,我有一个关于MATLAB中udp数据包的问题。我一直在使用oscsend.m脚本向其他应用程序发送udp数据包。 它工作正常。但是,现在我需要使用TCP/UDP/IP工具箱2.0.6中的pnet函数 因为我不再能够访问Matlab中的仪器控制工具箱,oscsend利用了它 我在网上查找答案,甚至联系了作者,但迄今为止运气不佳。尽管这个问题看起来很小,但我还是没能解决 通常情况下,仪表控制工具箱的用途如下: u = udp('127.0.0.1', 12345) %12345 being the

我有一个关于MATLAB中udp数据包的问题。我一直在使用oscsend.m脚本向其他应用程序发送udp数据包。 它工作正常。但是,现在我需要使用TCP/UDP/IP工具箱2.0.6中的pnet函数 因为我不再能够访问Matlab中的仪器控制工具箱,oscsend利用了它

我在网上查找答案,甚至联系了作者,但迄今为止运气不佳。尽管这个问题看起来很小,但我还是没能解决

通常情况下,仪表控制工具箱的用途如下:

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实例,它正在接收从前面提到的端口发送的数据)。 这是我在Oscssend里面做的,没有一个有效

%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 )
感谢你们所有提前花时间阅读这篇文章的人。 最好的。
Mario。

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

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

以下是我认为与原始仪器控制工具箱代码等效的代码:

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使用“WritePackage”,而不是“write”。请注意,您可以像上面列出的那样执行“udpconnect”,也可以像您尝试的那样为每个writepacket提供主机名/端口


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

感谢我的主管,如果您需要使用pnet通过oscsend.m发送UDP,请参阅下面的代码 只需在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 

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

编辑:在我使用6351端口发送和接收的原始代码中,为了显示目的,我现在将其更改为12345,我第一次问这个问题时输入错误,多亏了我的主管编写了制作oscsend的脚本