Communicate Between Two MATLAB Sessions Using User Datagram Protocol
This example shows how to send data over the User Datagram Protcol (UDP) between two MATLAB® sessions on the same computer using the udpport
function.
First MATLAB session
Create udpport Instance
Create a udpport
instance and bind to port 2020.
uFirst = udpport("LocalPort",2020)
uFirst = UDPPort with properties: IPAddressVersion: "IPV4" LocalHost: "0.0.0.0" LocalPort: 2020 NumBytesAvailable: 0 Show all properties, functions
Prepare Callback Function
Configure the callback function to read data received using the configureCallback
function. This callback function will trigger whenever a terminator is received. The sendAcknowledgement
callback function sends an acknowledgement string back to the udpport
instance in the second MATLAB session when it receives data.
Set the Terminator
property to "CR/LF"
, to match that of the other udpport
instance.
configureTerminator(uFirst, "CR/LF");
The Terminator
property should now be set to "CR/LF".
uFirst.Terminator
ans = "CR/LF"
Set up the callback function sendAcknowledgement
to trigger when the assigned terminator is received.
configureCallback(uFirst,"terminator",@sendAcknowledgement);
The sendAcknowledgement.m
callback function is given below.
function sendAcknowledgement(u, ~) % Read the data received from the other udpport instance. readline removes % the terminator from the data read. data = readline(u); % Prepare the acknowledgement string. data = "COMMAND RECEIVED - """ + data + """. SENDING ACKNOWLEDGEMENT."; % Send the acknowledgement string, followed by the Terminator "CR/LF", to the % udpport instance bound to port 3030 in the first MATLAB instance. writeline(u, data, "127.0.0.1", 3030); end
The BytesAvailableFcn
property should be now set to the callback function, and the BytesAvailableFcnMode
set to "terminator".
uFirst.BytesAvailableFcn
ans = function_handle with value:
@sendAcknowledgement
uFirst.BytesAvailableFcnMode
ans = "terminator"
Second MATLAB session
Create udpport Instance
Create a udpport
instance and bind to port 3030.
uSecond = udpport("LocalPort", 3030)
uSecond = UDPPort with properties: IPAddressVersion: "IPV4" LocalHost: "0.0.0.0" LocalPort: 3030 NumBytesAvailable: 0 Show all properties, functions
Prepare Callback Function
Configure the callback function readAcknowledgement
to read data received using the configureCallback
function. This callback function is triggered when a terminator is received. The terminator value used for this example is "CR/LF"
.
Set the Terminator
property to "CR/LF"
using the configureTerminator
function.
configureTerminator(uSecond,"CR/LF");
The Terminator
property should now be set to "CR/LF"
.
uSecond.Terminator
ans = "CR/LF"
Set up the callback function readAcknowledgement
to trigger when the assigned terminator is received.
configureCallback(uSecond,"terminator",@readAcknowledgement);
The readAcknowledgement.m
callback function is given below.
function readAcknowledgement(u, ~) % Read the acknowledgement data. readline removes the Terminator from the % data read. data = readline(u); % Display the acknowledgement string read. disp(data); end
The BytesAvailableFcn
property should be now set to the callback function, and the BytesAvailableFcnMode
set to "terminator"
.
uSecond.BytesAvailableFcn
ans = function_handle with value:
@readAcknowledgement
uSecond.BytesAvailableFcnMode
ans = "terminator"
Send Command to First MATLAB Session
Send a "START" command to the udpport
instance uFirst
on the first MATLAB session using writeline
. uFirst
is bound to port 2020. writeline
automatically appends the "START" command with the Terminator
"CR/LF"
.
disp("Sending Command - START");
Sending Command - START
writeline(uSecond, "START", "127.0.0.1", 2020);
Send another command to the same destination address and destination port. The "STOP" command is automatically appended with the Terminator
"CR/LF"
.
disp("Sending Command - STOP");
Sending Command - STOP
writeline(uSecond, "STOP");
Clear udpport
Pause before clearing the object for the responses to come back from the first MATLAB session.
pause(0.3);
Configure the callbacks to be off.
configureCallback(uSecond, "off");
The BytesAvailableFcn
property should be now set to an empty function_handle
, and the BytesAvailableFcnMode
set to "off".
uSecond.BytesAvailableFcn
ans = 0×0 empty function_handle array
uSecond.BytesAvailableFcnMode
ans = "off"
Clear udpport
instance.
clear uSecond