Связь между клиентом TCP/IP и сервером в MATLAB

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