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