주요 콘텐츠

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

MATLAB에서 TCP/IP 클라이언트와 서버 간 통신

이 예제는 tcpservertcpclient 함수를 사용하여 MATLAB®에서 TCP/IP 클라이언트와 TCP/IP 서버를 생성한 다음 TCP/IP 프로토콜을 통해 이들 간에 데이터를 전송하는 방법을 보여줍니다. 이 예제는 세 가지 다른 방법으로 실행할 수 있습니다.

  • 단일 MATLAB 세션 내에서.

  • 동일한 컴퓨터에서 두 개의 MATLAB 세션 사이.

  • 동일한 서브넷에 속한 서로 다른 컴퓨터의 두 MATLAB 세션 사이.

이 예제를 단일 MATLAB 세션에서 실행하려면 아무런 수정도 할 필요가 없습니다. 동일한 MATLAB 세션에서 서버와 클라이언트를 모두 생성합니다.

동일한 컴퓨터 또는 서로 다른 두 대의 컴퓨터에서 두 개의 MATLAB 세션으로 이 예제를 실행하려면 각 MATLAB 세션에서 지정된 섹션을 실행해야 합니다. 서버 세션콜백 함수 섹션을 첫 번째 MATLAB 세션의 하나의 MATLAB 스크립트로 복사합니다. 클라이언트 세션 섹션을 두 번째 MATLAB 세션의 다른 MATLAB 스크립트로 복사합니다. 클라이언트가 서버에 연결을 시도하기 전에 서버를 생성해야 하므로, 서버 세션 스크립트를 먼저 실행한 다음 클라이언트 세션 스크립트를 실행합니다.

두 개의 MATLAB 세션을 사용할 때 서버 세션에서 server.ServerAddressserver.ServerPort의 값을 복사하여 클라이언트 세션에서 tcpclient 객체를 생성하는 AddressPort 값으로 사용합니다.

서버 세션

이 세션에서는 클라이언트 연결 요청을 수신 대기하는 tcpserver 객체를 만듭니다. 클라이언트가 접속한 후 데이터를 전송합니다. 또한 configureCallback 메서드에서 활성화된 콜백 기능을 사용하여 클라이언트가 보낸 데이터를 읽습니다.

호스트 이름과 주소 찾기

서버가 생성된 컴퓨터의 호스트 이름과 주소를 찾으세요. 클라이언트는 이 주소를 사용해 서버에 연결합니다.

[~,hostname] = system('hostname');
hostname = string(strtrim(hostname));
address = resolvehost(hostname,"address");

서버 생성

머신의 주소와 포트 5000을 사용하여 tcpserver 객체를 생성합니다. TCP/IP 클라이언트가 서버에 연결할 때 데이터를 쓰는 connectionFcn라는 콜백 함수를 만듭니다. ConnectionChangedFcn 속성을 콜백 함수 connectionFcn로 설정합니다. 이 예제의 끝에서 connectionFcn 함수를 찾을 수 있습니다.

server = tcpserver(address,5000,"ConnectionChangedFcn",@connectionFcn)
server = 
  TCPServer with properties:

        ServerAddress: "172.28.200.248"
           ServerPort: 5000
            Connected: 0
        ClientAddress: ""
           ClientPort: []
    NumBytesAvailable: 0

  Show all properties, functions

바이트 콜백 모드를 사용하여 이진 데이터 읽기

지정된 바이트의 데이터가 있을 때마다 데이터를 읽는 readDataFcn라는 콜백 함수를 만듭니다. 읽은 데이터를 tcpserver 객체의 UserData 속성에 저장합니다. 이 예제의 끝에서 readDataFcn 함수를 찾을 수 있습니다.

7688바이트의 데이터를 받을 때마다 콜백 함수가 트리거되도록 설정합니다.

configureCallback(server,"byte",7688,@readDataFcn);

클라이언트 세션

이 세션에서는 서버에 연결하기 위한 tcpclient 객체를 생성합니다. 클라이언트는 서버로부터 전송된 데이터를 읽습니다. 그런 다음 읽은 데이터를 다시 서버로 전송합니다.

클라이언트 생성

tcpclient 인스턴스를 생성하고 시간 제한을 5초로 설정합니다.

두 개의 MATLAB 세션을 사용할 때 서버 세션에서 server.ServerAddressserver.ServerPort의 값을 복사하여 tcpclient 객체를 생성하는 AddressPort 값으로 사용합니다.

client = tcpclient(server.ServerAddress,server.ServerPort,"Timeout",5)
client = 
  tcpclient with properties:

              Address: '172.28.200.248'
                 Port: 5000
    NumBytesAvailable: 0

  Show all properties, functions

pause(1);

데이터 읽기 및 표시

서버에서 보낸 데이터를 읽습니다. 데이터 배열의 형태를 변경하고 플로팅합니다.

rawData = read(client,961,"double");
reshapedData = reshape(rawData,31,31);
surf(reshapedData);

데이터 쓰기

서버에 데이터를 씁니다.

write(client,rawData,"double");

클라이언트 지우기

tcpclient 인스턴스를 지웁니다.

clear client

콜백 함수

이진 데이터를 쓰기 위한 연결 콜백 함수

이 함수는 write를 호출하여 연결된 TCP/IP 클라이언트에 데이터를 씁니다.

function connectionFcn(src, ~)
if src.Connected
    disp("Client connection accepted by server.")
    data = membrane(1);
    write(src,data(:),"double");
end
end

이진 데이터를 읽기 위한 데이터 사용 가능 콜백 함수

이 함수는 read를 호출하여 BytesAvailableFcnCount 바이트 수의 데이터를 읽습니다.

function readDataFcn(src, ~)
disp("Data was received from the client.")
src.UserData = read(src,src.BytesAvailableFcnCount/8,"double");
reshapedServerData = reshape(src.UserData,31,31);
surf(reshapedServerData);
end