В этом примере показано, как использовать 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