Передача двоичных данных и данных ASCII на эхо-сервер с помощью TCP/IP

В этом примере показано, как настроить эхо-сервер и связаться с ним с помощью TCP/IP путем создания tcpclient объект. Двоичные данные и конечные строковые данные отправляются серверу, и сервер повторяет одни и те же данные обратно клиенту.

Настройка сервера TCP/IP Echo и клиента

Создайте эхо-сервер TCP/IP на порте 4500.

echotcpip("on",4500);

Создайте tcpclient и соединиться с сервером. Укажите удаленный хост следующим "localhost" для подключения к эхо-серверу. Укажите тот же номер удаленного порта, который вы использовали для эхо-сервера.

t = tcpclient("localhost",4500)
t = 
  tcpclient with properties:

              Address: 'localhost'
                 Port: 4500
    NumBytesAvailable: 0

  Show all properties, functions

Запись и чтение двоичных данных с использованием режима коллбэка

Создайте функцию обратного вызова readDataFcn считывание данных при каждом доступе к указанным байтам данных. Сохраните считанные данные в UserData свойство tcpclient объект. Смотрите readDataFcn функция в конце этого примера.

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

configureCallback(t,"byte",10,@readDataFcn);

Отправка 10 байт данных на эхо-сервер.

sendData = 1:10;
write(t,sendData,"uint8");

Эхо-сервер отправляет двоичные данные обратно в клиент TCP/IP.

Пауза на 1 секунду, чтобы разрешить функцию обратного вызова readDataFcn для завершения его операции.

pause(1);

Чтение двоичных данных, хранящихся в UserData свойство и отобразить его.

data = t.UserData
data = 1×10 uint8 row vector

    1    2    3    4    5    6    7    8    9   10

Эти данные совпадают с данными, которые вы записали на эхо-сервер.

Запись и чтение данных ASCII с использованием режима коллбэка Terminator

Создайте функцию обратного вызова readASCIIFcn считывать данные каждый раз, когда терминатор строки найден в данных. Сохраните считанные данные в UserData свойство tcpclient объект. Смотрите readASCIIFcn функция в конце этого примера.

Установите функцию обратного вызова, чтобы считать конечные строковые данные. Коллбэк запускается, когда он получает терминатор строки в данных.

configureCallback(t,"terminator",@readASCIIFcn);

Установите Terminator значение свойства к "LF".

configureTerminator(t,"LF");

Отправка строковых данных на эхо-сервер с помощью writeline. Система терминатора строки символа "LF" автоматически добавляется к этим строковым данным.

writeline(t,"Echo this string.");

Эхо-сервер отправляет данные ASCII обратно в клиент TCP/IP.

Пауза на 1 секунду, чтобы разрешить функцию обратного вызова readASCIIFcn для завершения его операции.

pause(1);

Чтение данных ASCII, хранящихся в UserData свойство и отобразить его.

textData = t.UserData
textData = 
"Echo this string."

Эти данные совпадают с данными, которые вы записали на эхо-сервер.

Очистить соединение

Остановите эхо-сервер и очистите tcpclient объект.

echotcpip("off");
clear t

Функции обратного вызова

Функция обратного вызова для чтения двоичных данных

Эта функция вызывает read чтение BytesAvailableFcnCount количество байт данных. Эти данные повторяются сервером.

function readDataFcn(src, ~)
src.UserData = read(src,src.BytesAvailableFcnCount,"uint8");
end

Функция обратного вызова для чтения данных ASCII

Эта функция вызывает readline для чтения данных ASCII, первоначально отправленных tcpclient объект. Данные повторяются сервером.

function readASCIIFcn(src, ~)
src.UserData = readline(src);
end