이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
MATLAB에서 TCP/IP 클라이언트와 서버 간 통신
이 예제는 tcpserver 및 tcpclient 함수를 사용하여 MATLAB®에서 TCP/IP 클라이언트와 TCP/IP 서버를 생성한 다음 TCP/IP 프로토콜을 통해 이들 간에 데이터를 전송하는 방법을 보여줍니다. 이 예제는 세 가지 다른 방법으로 실행할 수 있습니다.
단일 MATLAB 세션 내에서.
동일한 컴퓨터에서 두 개의 MATLAB 세션 사이.
동일한 서브넷에 속한 서로 다른 컴퓨터의 두 MATLAB 세션 사이.
이 예제를 단일 MATLAB 세션에서 실행하려면 아무런 수정도 할 필요가 없습니다. 동일한 MATLAB 세션에서 서버와 클라이언트를 모두 생성합니다.
동일한 컴퓨터 또는 서로 다른 두 대의 컴퓨터에서 두 개의 MATLAB 세션으로 이 예제를 실행하려면 각 MATLAB 세션에서 지정된 섹션을 실행해야 합니다. 서버 세션과 콜백 함수 섹션을 첫 번째 MATLAB 세션의 하나의 MATLAB 스크립트로 복사합니다. 클라이언트 세션 섹션을 두 번째 MATLAB 세션의 다른 MATLAB 스크립트로 복사합니다. 클라이언트가 서버에 연결을 시도하기 전에 서버를 생성해야 하므로, 서버 세션 스크립트를 먼저 실행한 다음 클라이언트 세션 스크립트를 실행합니다.
두 개의 MATLAB 세션을 사용할 때 서버 세션에서 server.ServerAddress와 server.ServerPort의 값을 복사하여 클라이언트 세션에서 tcpclient 객체를 생성하는 Address와 Port 값으로 사용합니다.
서버 세션
이 세션에서는 클라이언트 연결 요청을 수신 대기하는 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.ServerAddress와 server.ServerPort의 값을 복사하여 tcpclient 객체를 생성하는 Address와 Port 값으로 사용합니다.
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