주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

사용자 데이터그램 프로토콜(UDP)을 사용하여 두 MATLAB 세션 간 통신하기

이 예제는 udpport 함수를 사용하여 동일한 컴퓨터상의 두 MATLAB® 세션 간에 UDP(User Datagram Protocol)를 통해 데이터를 전송하는 방법을 보여줍니다.

첫 번째 MATLAB 세션

udpport 인스턴스 생성

udpport 인스턴스를 생성하고 포트 2020에 바인딩합니다.

uFirst = udpport("LocalPort",2020)
uFirst = 
  UDPPort with properties:

     IPAddressVersion: "IPV4"
            LocalHost: "0.0.0.0"
            LocalPort: 2020
    NumBytesAvailable: 0

  Show all properties, functions

콜백 함수 준비

configureCallback 함수를 사용하여 수신된 데이터를 읽도록 콜백 함수를 설정합니다. 이 콜백 함수는 종결자가 수신될 때마다 트리거됩니다. sendAcknowledgement 콜백 함수는 데이터를 수신하면 두 번째 MATLAB 세션에 있는 udpport 인스턴스로 확인 응답 문자열을 전송합니다.

다른 udpport 인스턴스와 일치하도록 Terminator 속성을 "CR/LF"로 설정하십시오.

configureTerminator(uFirst, "CR/LF");

Terminator 속성을 "CR/LF"로 설정해야 합니다.

uFirst.Terminator
ans = 
"CR/LF"

지정된 종결자가 수신되면 트리거되도록 sendAcknowledgement 콜백 함수를 설정합니다.

configureCallback(uFirst,"terminator",@sendAcknowledgement);

sendAcknowledgement.m 콜백 함수는 다음과 같습니다.

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 acknowledgment string.
data = "COMMAND RECEIVED - """ + data +  """. SENDING ACKNOWLEDGEMENT.";

% Send the acknowledgment 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

이제 BytesAvailableFcn 속성은 콜백 함수로 설정되어야 하며, BytesAvailableFcnMode"terminator"로 설정되어야 합니다.

uFirst.BytesAvailableFcn
ans = function_handle with value:
    @sendAcknowledgement

uFirst.BytesAvailableFcnMode
ans = 
"terminator"

두 번째 MATLAB 세션

udpport 인스턴스 생성

udpport 인스턴스를 생성하고 포트 3030에 바인딩합니다.

uSecond = udpport("LocalPort", 3030)
uSecond = 
  UDPPort with properties:

     IPAddressVersion: "IPV4"
            LocalHost: "0.0.0.0"
            LocalPort: 3030
    NumBytesAvailable: 0

  Show all properties, functions

콜백 함수 준비

configureCallback 함수를 사용하여 수신된 데이터를 읽도록 readAcknowledgement 콜백 함수를 설정하십시오. 이 콜백 함수는 종결자가 수신되면 트리거됩니다. 이 예제에서 사용된 종결자 값은 "CR/LF"입니다.

configureTerminator 함수를 사용하여 Terminator 속성을 "CR/LF"로 설정하십시오.

configureTerminator(uSecond,"CR/LF");

Terminator 속성을 "CR/LF"로 설정해야 합니다.

uSecond.Terminator
ans = 
"CR/LF"

지정된 종결자가 수신되면 트리거되도록 readAcknowledgement 콜백 함수를 설정합니다.

configureCallback(uSecond,"terminator",@readAcknowledgement);

readAcknowledgement.m 콜백 함수는 다음과 같습니다.

function readAcknowledgement(u, ~)
% Read the acknowledgment data. readline removes the Terminator from the
% data read.
data = readline(u);

% Display the acknowledgment string read.
disp(data);
end

이제 BytesAvailableFcn 속성은 콜백 함수로 설정되어야 하며, BytesAvailableFcnMode"terminator"로 설정되어야 합니다.

uSecond.BytesAvailableFcn
ans = function_handle with value:
    @readAcknowledgement

uSecond.BytesAvailableFcnMode
ans = 
"terminator"

첫 번째 MATLAB 세션에 명령을 전송

writeline를 사용하여 첫 번째 MATLAB 세션에서 udpport 인스턴스인 uFirst에 "START" 명령을 전송합니다. uFirst는 포트 2020에 바인딩되어 있습니다. writeline는 "START" 명령 뒤에 Terminator "CR/LF"를 자동으로 추가합니다.

disp("Sending Command - START");
Sending Command - START
writeline(uSecond, "START", "127.0.0.1", 2020);

동일한 수신 주소와 수신 포트로 또 다른 명령을 전송하십시오. "STOP" 명령어 뒤에는 자동으로 Terminator "CR/LF"가 추가됩니다.

disp("Sending Command - STOP");
Sending Command - STOP
writeline(uSecond, "STOP");

udpport 지우기

첫 번째 MATLAB 세션의 응답이 돌아올 때까지 객체를 지우기 전에 잠시 기다리십시오.

pause(0.3);

콜백을 비활성화하도록 설정합니다.

configureCallback(uSecond, "off");

BytesAvailableFcn 속성은 이제 빈 값인 function_handle로 설정되어야 하며, BytesAvailableFcnMode"off"로 설정되어야 합니다.

uSecond.BytesAvailableFcn
ans =

  0×0 empty function_handle array
uSecond.BytesAvailableFcnMode
ans = 
"off"

udpport 인스턴스를 지웁니다.

clear uSecond