exponenta event banner

Обмен данными между клиентом 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