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