主要内容

dsp。UDPSender

发送UDP报文到网络

描述

UDPSender对象向网络发送UDP包。

发送UDP报文到网络。

  1. 创建dsp。UDPSender对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

udp= dsp。UDPSender返回一个UDP发送对象,udp,将UDP报文发送到指定端口。

例子

udp= dsp。UDPSender (名称,值返回一个UDP发送对象,udp,并将每个属性设置为指定的值。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

指定数据发送到的远端(即主机)IP地址。默认为“127.0.0.1”,即本地主机。

数据类型:字符

指定数据发送到的远端IP地址上的端口。此属性在生成的代码中可调,但在模拟期间不可调。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

指定如何确定主机的本地IP端口为汽车财产.如果你指定汽车时,对象从可用端口中动态选择端口。如果你指定财产属性中指定的源LocalIPPort财产。

指定要发送数据的端口。

依赖关系

属性时应用此属性LocalIPPortSource财产财产

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

发送UDP报文的内部缓冲区大小,以字节为单位指定为范围内的整数(1, 67108864)

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

使用

描述

例子

y= udp (发送一个UDP数据包,,到网络。

输入参数

全部展开

对象每次调用向网络发送一个UDP包。

数据类型:||int8|int16|int32|uint8|uint16|uint32|逻辑
复数支持:万博1manbetx是的

对象的功能

要使用对象函数,请指定System对象™作为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

发送和接收UDP报文dsp。UDPSender而且dsp。UDPReceiver系统对象。计算成功传输的字节数。

请注意:如果您正在使用R2016a或更早的版本,请使用等效的步骤语法替换对对象的每个调用。例如,obj (x)就变成了步骤(obj, x)

设置RemoteIPPortUDP发送方和LocalIPPort的UDP接收器31000.将数据向量的长度设置为128的值,该值小于MaximumMessageLength接收者的属性。为防止丢包,请调用设置方法在第一次调用对象算法之前。

Udpr = dsp。UDPReceiver (“LocalIPPort”, 31000);Udps = dsp。UDPSender (“RemoteIPPort”, 31000);设置(udpr);bytesSent = 0;bytesReceived = 0;dataLength = 128;

在每个迭代循环中,发送和接收一个数据包。在循环的末尾,使用函数输出发送方发送的字节数和接收方接收的字节数。

k = 1:20 dataSent = uint8(255*rand(1,dataLength));bytesSent = bytesSent + dataLength;udp (dataSent);dataReceived = udpr();bytesReceived = bytesReceived + length(dataReceived);结束释放(udp);释放(udpr);流('已发送字节:%d\n', bytesSent);
发送字节数:2560
流('接收到的字节:%d\n', bytesReceived);
接收字节数:2560

的本端IP端口号dsp。UDPReceiver对象的远端IP端口号dsp。UDPSender对象在生成的代码中是可调的。生成一个MEX文件接收机函数,包含算法接收正弦波数据在UDP网络。修改UDP receiver的远端IP端口号,不重新生成MEX文件。验证通过网络发送和接收的字节数。

请注意:此示例仅在R2017a或更高版本运行。

的输入接收机函数的本地IP端口号dsp。UDPReceiver系统对象™。该函数的输出是从UDP网络接收到的字节数。

类型接收机
function [bytesReceived] = receiver(portnumber) persistent udpRx if isempty(udpRx) udpRx = dsp.UDPReceiver('MessageDataType','double');udpRx结束。LocalIPPort = portnumber;dataReceived = udpRx();bytesReceived = length(dataReceived);

dsp。UDPSender对象与remoteIPPortnumber设置为65000通过UDP网络发送数据。的dsp。UDPReceiver对象与LocalIPPortnumber设置为65000接收来自UDP网络的数据。数据是一个正弦波,每帧包含250个样本。

Portnumber = 65000;udpSend = dsp。UDPSender (“RemoteIPPort”portnumber);sin = dsp。SineWave (“SamplesPerFrame”, 250);bytesSent = 0;bytesReceived = 0;dataLength = 250;i = 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived + receiver(portnumber);结束流('发送字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%d', bytesReceived);
接收字节数:2250

通过UDP网络成功收发数据。初始数据由于开销而被丢弃。

生成一个MEX文件receiver.m函数。

codegen接收机arg游戏{65000}
代码生成成功。

释放发送者并更改RemotePort数字到25000。的LocalIPPort接收方号码继续为65000。由于端口号不同,数据传输不成功。

释放(udpSend) portnumberTwo = 25000;udpSend。RemoteIPPort = portnumber2;bytesReceived = 0;bytesSent = 0;i = 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex(portnumber);结束流('发送字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%d', bytesReceived);
接收的字节数:0

清空MEX文件,修改接收端本端IP端口号为25000。清除MEX可以在不重新生成MEX的情况下更改接收端口号。发送端口号和接收端口号匹配。验证数据传输是否成功。

清晰的墨西哥人% #好吧bytesReceived = 0;bytesSent = 0;i = 1:10 dataSent = sin ();bytesSent = bytesSent + dataLength;udpSend (dataSent);bytesReceived = bytesReceived + receiver_mex(portnumberTwo);结束流('发送字节数:%d', bytesSent);
发送字节数:2500
流('接收的字节数:%d', bytesReceived);
接收字节数:2250

数据通过UDP网络传输成功。初始数据由于开销而被丢弃。

计算正弦波的STFT,并在UDP网络上传输复杂的STFT数据。在接收端,计算接收数据的ISTFT。使用时间范围可视化发送的数据和接收的数据。

dsp。UDPSender对象可以发送复杂数据。为了使dsp。UDPReceiver对象接收复杂数据时,设置IsMessageComplex财产真正的

Udps = dsp。UDPSender (“RemoteIPPort”, 31000);Udpr = dsp。UDPReceiver (“LocalIPPort”, 31000,...“IsMessageComplex”,真的,...“MessageDataType”“双”);设置(udpr);bytesSent = 0;bytesReceived = 0;dataLength = 128;

初始化dsp。STFT而且dsp。ISTFT具有周期性的系统对象损害窗口长度为120个样品,重叠长度为60个样品。设置FFT长度为128。

winLen = 120;overlapLen = 60;frameLen = winLen-overlapLen;STF = dsp。STFT (...“窗口”损害(winLen“周期”),...“OverlapLength”overlapLen,“FFTLength”, 128);Istf = dsp。ISTFT (...“窗口”损害(winLen“周期”),...“OverlapLength”overlapLen,...“WeightedOverlapAdd”, 0);

输入是一个频率为100hz的正弦信号,采样率为1000hz,每个信号帧有60个采样。

sin = dsp。SineWave (...“SamplesPerFrame”winLen-overlapLen,...“频率”, 100);

初始化一个timescope采样率为1000 Hz,时间跨度为0.09的对象。的延迟对象在比较输入与重建输出信号时纠正重叠长度。

Ts =时隙(“SampleRate”, 1000,...“ShowLegend”,真的,...“YLimits”[1],...“TimeSpanSource”“属性”...“时间间隔”.09点,...“ChannelNames”, {“输入”“重建”});Dly = dsp。延迟(“长度”, overlapLen);

通过UDP网络传输复杂的正弦波STFT数据。计算接收数据的ISTFT。比较输入,x,到重构输出,y.由于对象引入的延迟,与输入相比,重构输出在时间上发生了移位。因此,为了进行比较,取重构输出之间的差的范数,y,和之前的输入,xprev

使用时间范围可视化信号。你可以看到重建的信号和输入信号重叠得非常紧密。

N = 0 (1,1e3);Xprev = 0;K = 1:12 e3 x = sin ();X = stf(X);bytesSent = bytesSent + length(X)udp (X);dataReceived = udpr();如果(~isempty(dataReceived)) y = istf(dataReceived);结束N (1,k) = norm(y-xprev);Xprev = x;bytesReceived = bytesReceived + length(dataReceived);ts([海底(x), y]);结束

差值的范数非常小,表明输出信号是输入信号的完美重构版本。

max (abs (n))
Ans = 5.3870e-14

释放UDP对象。

释放(udp);释放(udpr);

由于UDP协议的易丢失特性,一些发送的数据包可能在传输过程中丢失。要检查是否丢失,请将发送的字节与接收的字节进行比较。

流('已发送字节:%d\n', bytesSent);
发送字节数:128000
流('接收到的字节:%d\n', bytesReceived);
接收字节数:128000

扩展功能

版本历史

在R2012a中引入

另请参阅

对象