文档

dsp。udreceiver系统对象

接收来自网络的UDP报文

描述

dsp。UDPReceiver系统对象™通过UDP网络从指定的远程IP地址接收UDP包RemoteIPAddress财产。对象然后将数据保存到其内部缓冲区。在每个UDP包中接收的数据量(元素的数量)是不同的。对象在不丢失数据的情况下可以接收的最大字节数由下面的财产。的MaximumMessageLength属性指定每个数据包可以包含的最大样本数。的LocalIPPort对象接收数据的对象在生成的代码中是可调的,但在模拟期间是不可调的。有关示例,请参见在MATLAB中调整UDP端口号

接收来自网络的UDP报文。

  1. 创建dsp。UDPReceiverobject and set its properties.

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

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

创建

语法

Udpr = dsp。UDPReceiver
udpr = dsp.UDPReceiver(名称,值)

描述

例子

udpr= dsp。UDPReceiver返回一个从指定端口接收UDP数据包的UDP接收器对象。

例子

udpr= dsp。UDPReceiver (名称,值返回一个UDP接收对象,其中每个指定属性设置为指定值。将每个属性名用单引号括起来。

属性

全部展开

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

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

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

接收数据的端口,指定为范围[1 65535]中的标量。此属性在生成的代码中可调,但在模拟期间不可调。

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

接收数据的地址,指定为包含有效IP地址的字符向量。输入指定IP地址可以阻断来自其他地址的UDP报文。默认的,“0.0.0.0”,表示可以接受来自任意远端IP地址的数据。

数据类型:字符

接收UDP包的内部缓冲区的大小,以字节为单位指定为范围内的标量(1 67108864).如果接收到的字节数超过这个值,缓冲区将溢出,内容将被截断。

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

输出消息的最大长度,在示例中指定为范围[1 65507]中的正标量。将此属性设置为等于或大于UDP数据包的数据大小。如果接收到的样本数量超过此属性中指定的数量,则会截断多余的数据。

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

消息输出中矢量元素的数据类型,指定为MATLAB®内置数据类型。

将数据类型与用于创建UDP数据包的数据输入匹配。

数据类型:字符

使用

语法

dataR = udpr()

描述

例子

塔尔= udpr ()从网络接收一个UDP包。

输出参数

全部展开

从网络接收的数据,作为一个包返回。的MaximumMessageLength属性指定每个数据包可以包含的最大字节数。接收到的数据长度是指从网络接收到的字节数。

数据类型:||int8|int16|int32|uint8|uint16|uint32|逻辑

对象的功能

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

发行版(obj)

全部展开

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

例子

全部展开

发送和接收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}

                   

释放发送者并更改RemoteIPPort数字到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网络传输成功。初始数据由于开销而被丢弃。

扩展功能

在R2012a中引入

这个话题有用吗?