0

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 の機器制御ツールボックスにアクセスできなくなりました。

私は答えをオンラインで調べ、著者に連絡することさえできませんでした。問題は些細に思えますが、私はそれを機能させることができませんでした。

通常、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 )

時間を割いてこれを読んでくれた皆さんに、事前に感謝します。一番。マリオ。

4

3 に答える 3

1

ところで、libloに基づくライブラリであるoscmexもあり、 matlab から/内で OSC メッセージを直接送受信できます。

于 2013-06-13T12:37:08.457 に答える
1

データを送信する UDP ポートと、コードの監視とテストに使用しているプロセスの種類が明確ではありません。関連する 2 つのポートがあります... 1 つはバインド先のローカル ポート (「udpsocket」の引数) で、もう 1 つはパケットの宛先ポートで、宛先ホストと共に指定されます。

Instrument Control Toolbox の構文では、作成中に宛先のホスト名とポートが必要なようです。必要に応じて、オプションの引数としてローカル ポートを指定できます。対照的に、pnet('udpsocket') はローカル ポートを使用します。最初の一連のコードで、宛先ホストが指定されていないことに気付くはずです。これにより、疑わしいものになるはずです... pnet.m の UDP ドキュメントを読み進めると、別の関数があることがわかりますpnet(sock, 'udpconnect', 'hostname', port)。 " ホスト/ポート ペアへの UDP ソケット。これにより、writepacket を実行するときにホスト名/ポートを省略できます。

したがって、元の Instrument Control Toolbox コードに相当するものは次のとおりです。

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」を実行するか、またはしようとしていたように、すべての書き込みパケットでホスト名/ポートを指定できることに注意してください。

あなたの質問から私が理解できないのは、6351 がどのように入力されるかということです。

于 2013-03-07T16:39:07.823 に答える
0

私のスーパーバイザーに感謝します。これは、pnet http://www.mathworks.fr/matlabcentral/fileexchange/31400-send-open-sound-control-osc-messages/contentを使用して oscsend.m 経由で udps を送信する必要がある場合のコードです 。 /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 
于 2013-03-13T16:21:26.803 に答える