Main Content

TCP/IP를 사용하여 에코 서버에 이진 데이터와 ASCII 데이터 전달하기

이 예제에서는 에코 서버를 설정하고 tcpclient 객체를 생성해 TCP/IP를 사용하여 이 서버와 통신하는 방법을 보여줍니다. 이진 데이터와 종결 문자열 데이터가 서버에 전송되면 서버가 동일한 데이터를 클라이언트에 다시 에코합니다.

TCP/IP 에코 서버와 클라이언트 설정하기

포트 4500에 TCP/IP 에코 서버를 만듭니다.

echotcpip("on",4500);

tcpclient 객체를 만들고 서버에 연결합니다. 원격 호스트를 에코 서버에 연결할 "localhost"로 지정합니다. 에코 서버에 사용한 것과 동일한 원격 포트 번호를 지정합니다.

t = tcpclient("localhost",4500)
t = 
  tcpclient with properties:

              Address: 'localhost'
                 Port: 4500
    NumBytesAvailable: 0

  Show all properties, functions

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

지정된 바이트의 데이터가 제공될 때마다 데이터를 읽어오는 콜백 함수 readDataFcn을 만듭니다. 읽어온 데이터를 tcpclient 객체의 UserData 속성에 저장합니다. 이 예제의 끝에 나와 있는 readDataFcn 함수를 참조하십시오.

10바이트의 데이터가 수신될 때마다 콜백 함수가 트리거되도록 설정합니다.

configureCallback(t,"byte",10,@readDataFcn);

10바이트의 데이터를 에코 서버에 전송합니다.

sendData = 1:10;
write(t,sendData,"uint8");

에코 서버가 이진 데이터를 다시 TCP/IP 클라이언트에 전송합니다.

콜백 함수 readDataFcn의 작업이 완료될 수 있도록 1초 동안 일시 중지합니다.

pause(1);

UserData 속성에 저장된 이진 데이터를 읽어오고 표시합니다.

data = t.UserData
data = 1×10 uint8 row vector

    1    2    3    4    5    6    7    8    9   10

이 데이터가 에코 서버에 쓴 데이터와 일치합니다.

종결자 콜백 모드를 사용하여 ASCII 데이터 쓰기 및 읽기

데이터에서 종결자가 발견될 때마다 데이터를 읽어오는 콜백 함수 readASCIIFcn을 만듭니다. 읽어온 데이터를 tcpclient 객체의 UserData 속성에 저장합니다. 이 예제의 끝에 나와 있는 readASCIIFcn 함수를 참조하십시오.

종결 문자열 데이터를 읽어오도록 콜백 함수를 설정합니다. 데이터에서 종결자를 수신하면 콜백이 트리거됩니다.

configureCallback(t,"terminator",@readASCIIFcn);

Terminator 속성값을 "LF"로 설정합니다.

configureTerminator(t,"LF");

writeline을 사용하여 문자열 데이터를 에코 서버에 전송합니다. 종결자 문자 "LF"가 자동으로 이 문자열 데이터에 추가됩니다.

writeline(t,"Echo this string.");

에코 서버가 ASCII 데이터를 다시 TCP/IP 클라이언트에 전송합니다.

콜백 함수 readASCIIFcn의 작업이 완료될 수 있도록 1초 동안 일시 중지합니다.

pause(1);

UserData 속성에 저장된 ASCII 데이터를 읽어오고 표시합니다.

textData = t.UserData
textData = 
"Echo this string."

이 데이터가 에코 서버에 쓴 데이터와 일치합니다.

연결 지우기

에코 서버를 중지하고 tcpclient 객체를 지웁니다.

echotcpip("off");
clear t

콜백 함수

이진 데이터를 읽어오는 콜백 함수

이 함수는 read를 호출하여, BytesAvailableFcnCount바이트의 데이터를 읽어옵니다. 이 데이터는 서버에 의해 다시 에코됩니다.

function readDataFcn(src, ~)
src.UserData = read(src,src.BytesAvailableFcnCount,"uint8");
end

ASCII 데이터를 읽어오는 콜백 함수

이 함수는 readline을 호출하여, 원래 tcpclient 객체에 의해 전송된 ASCII 데이터를 읽어옵니다. 이 데이터는 서버에 의해 다시 에코됩니다.

function readASCIIFcn(src, ~)
src.UserData = readline(src);
end