В этом примере показано, как использовать tcpserver и tcpclient для создания клиента TCP/IP и сервера TCP/IP в MATLAB и последующей передачи данных между ними по протоколу TCP/IP. Этот пример можно выполнить тремя различными способами:
В пределах одного сеанса MATLAB.
Между двумя сеансами MATLAB на одном компьютере.
Между двумя сеансами MATLAB на разных компьютерах, входящих в одну подсеть.
Для выполнения этого примера в одном сеансе MATLAB не требуется вносить какие-либо изменения. Создайте сервер и клиент в одном сеансе MATLAB.
Для выполнения этого примера в двух различных сессиях MATLAB либо на одном компьютере, либо на двух разных компьютерах необходимо запускать указанные разделы в каждой сессии MATLAB. Скопируйте разделы Функции сеанса сервера и обратного вызова в один сценарий MATLAB в первом сеансе MATLAB. Скопируйте раздел «Сеанс клиента» в другой сценарий MATLAB во втором сеансе MATLAB. Сначала запустите сценарий сеанса сервера, а затем сценарий сеанса клиента, поскольку перед попыткой подключения клиента к серверу необходимо создать сервер.
При использовании двух сеансов MATLAB скопируйте значения server.ServerAddress и server.ServerPort из сеанса сервера и использовать их в качестве Address и Port значения для создания tcpclient в сеансе клиента.
В этом сеансе создайте tcpserver объект, прослушивающий запросы на подключение клиента. Он отправляет данные после подключения клиента к нему. Он также использует функцию обратного вызова, разрешенную configureCallback способ считывания данных, отправленных клиентом.
Найдите имя хоста и адрес компьютера, на котором создан сервер. Клиент использует этот адрес для подключения к серверу.
[~,hostname] = system('hostname'); hostname = string(strtrim(hostname)); address = resolvehost(hostname,"address");
Создать tcpserver с использованием адреса машины и порта 5000. Создание функции обратного вызова с именем connectionFcn для записи данных при подключении клиента TCP/IP к серверу. Установите 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 считывать данные каждый раз, когда доступны указанные байты данных. Сохранить считанные данные в UserData имущество tcpserver объект. Вы можете найти readDataFcn в конце этого примера.
Установите функцию обратного вызова так, чтобы она запускала каждый раз, когда принимается 7688 байт данных.
configureCallback(server,"byte",7688,@readDataFcn);В этом сеансе создайте tcpclient объект для подключения к серверу. Клиент считывает данные, отправленные с сервера. Затем он отправляет считанные данные обратно на сервер.
Создать tcpclient и установите время ожидания равным пяти секундам.
При использовании двух сеансов MATLAB скопируйте значения server.ServerAddress и server.ServerPort из сеанса сервера и использовать их в качестве Address и Port значения для создания tcpclient объект.
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