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

В этом примере показано, как использовать tcpserver и tcpclient функции, чтобы создать клиент TCP/IP и сервер TCP/IP в MATLAB и затем отправить данные между ними по TCP/IP protcol. Можно запустить этот пример три различных пути:

  • В одном сеансе работы с MATLAB.

  • Между двумя сеансами работы с MATLAB на том же компьютере.

  • Между двумя сеансами работы с MATLAB на различных компьютерах, которые являются частью той же подсети.

Чтобы запустить этот пример в одном сеансе работы с MATLAB, вы не должны делать модификации. Создайте и сервер и клиент в том же сеансе работы с MATLAB.

Чтобы запустить этот пример в двух различных сеансах работы с MATLAB или на том же компьютере или на двух различных компьютерах, необходимо запустить заданные разделы в каждом сеансе работы с MATLAB. Скопируйте Сеанс Сервера и разделы Функций обратного вызова к одному скрипту MATLAB в первом сеансе работы с MATLAB. Скопируйте раздел Client Session в другой скрипт 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 функция в конце этого примера.

Установите функцию обратного вызова инициировать каждый раз, когда 7 688 байтов данных получены.

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