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