Этот раздел предоставляет подробную информацию и примеры, исследуя операции чтения ASCII и операции записи с объектом UDP.
Эти функции используются при чтении и записи текста:
Функция | Цель |
---|---|
fprintf | Запишите текст в сервер. |
fscanf | Считайте данные из сервера и отформатируйте как текст. |
Эти свойства сопоставлены с чтением и записью текста:
Свойство | Цель |
---|---|
ValuesReceived | Задает общее количество значений, считанных из сервера. |
ValuesSent | Задает общее количество значений, отправленных в сервер. |
InputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь во входном буфере когда-то. |
OutputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода когда-то. |
Terminator | Символ раньше отключал команды, отправленные в сервер. |
Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.
В данном примере мы будем использовать сервер эха, которому предоставляют тулбокс. Сервер эха позволяет вам экспериментировать с основной функциональностью объектов UDP, не связывая с существующим устройством. Сервер эха является сервисом, который возвращается к адресу и порту отправителя, те же байты, которые это получает от отправителя.
echoudp('on', 8000)
Необходимо создать объект UDP. В этом примере создайте объект UDP, сопоставленный с хостом 127.0.0.1 (ваша локальная машина), порт 8000. В общем случае имя хоста или адрес и серверный порт будут заданы устройством и вашей конфигурацией сети.
u = udp('127.0.0.1', 8000);
Прежде чем можно будет выполнить операцию чтения или операцию записи, необходимо соединить объект UDP с сервером с fopen
функция.
fopen(u)
Если объект был успешно соединен, его Status
свойство автоматически сконфигурировано к open
.
u.Status ans = open
Порты UDP могут быть совместно использованы другими приложениями, чтобы позволить, чтобы несколько приложений слушали дейтаграммы UDP на том порте. Это допускает способность слушать широковещательные сообщения UDP на том же локальном номере порта и в MATLAB и в других приложениях. Можно включить и отключить эту возможность с новым свойством объекта UDP под названием EnablePortSharing
. Смотрите включают совместное использование порта по UDP.
Вы используете fprintf
функционируйте, чтобы записать данные о ASCII в сервер. Например, запишите строку в echoserver.
fprintf(u, 'Request Time');
По умолчанию, fprintf
функция действует в синхронном режиме. Это означает тот fprintf
блокирует командную строку MATLAB, пока одно из следующего не происходит:
Все данные записаны
Тайм-аут происходит, как задано Timeout
свойство
По умолчанию fprintf
функционируйте данные о ASCII записей с помощью %s\n
формат. Все случаи \n
в команде, записанной в сервер, заменяются Terminator
значение свойства. При использовании формата по умолчанию, %s\n
, все команды, записанные в сервер, закончатся Terminator
символ.
Для предыдущей команды перевод строки (LF) отправляется после 'Request Time'
записан в сервер, таким образом, указав на конец команды.
Можно также задать формат команды, записанной путем обеспечения третьего входного параметра fprintf
. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s.
Например, команда данных, ранее показанная, может быть записана в сервер с помощью двух вызовов fprintf
.
fprintf(u, '%s', 'Request'); fprintf(u, '%s'\n, 'Time');
Terminator
символ указывает на конец команды и отправляется после последней возможности в fprintf
.
OutputBufferSize
свойство задает максимальное количество байтов, которые могут быть записаны в сервер целиком. По умолчанию, OutputBufferSize
512
.
u.OutputBufferSize ans = 512
Если команда задана в fprintf
содержит больше чем 512 байтов, ошибка возвращена, и никакие данные не записаны в сервер.
ValuesSent
свойство указывает на общее количество значений, записанных в сервер, поскольку объект был соединен с сервером.
u.ValuesSent ans = 26
Удалите любые данные, которые были возвращены в echoserver и получены объектом UDP.
flushinput(u);
UDP отправляет и получает данные в блоках, которые называются дейтаграммами. Каждый раз, когда вы пишете или считываете данные с объектом UDP, вы пишете или читаете дейтаграмму. Например, дейтаграмма с 13 байтами (12 байтов ASCII плюс терминатор строки LF) отправляется в echoserver.
fprintf(u, 'Request Time');
Сервер эха передаст обратно дейтаграмму, содержащую те же 13 байтов.
u.BytesAvailable ans = 13
Вы используете fscanf
функционируйте, чтобы считать данные о ASCII из сервера.
data = fscanf(u) data = Request Time
По умолчанию, fscanf
функционируйте данные о чтениях с помощью '%c'
формат и блоки командная строка MATLAB до одного из следующего происходят:
Терминатор строки получен, как задано Terminator
свойство (если DatagramTerminateMode
off
)
Тайм-аут происходит, как задано Timeout
свойство
Входной буфер заполнен
Конкретное количество значений читается (если DatagramTerminateMode
off
)
Дейтаграмма была получена (если DatagramTerminateMode
включен),
Можно также задать формат данных, считанных путем обеспечения второго входного параметра fscanf
. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s.
Например, символ vector'0.80'
отправленный в echoserver может быть считан в MATLAB как двойное использование %f
вектор символов формата.
fprintf(u, '0.80'); data = fscanf(u, '%f') data = 0.8000 isnumeric(data) ans = 1
DatagramTerminateMode
свойство указывает, должна ли операция чтения завершить работу, когда дейтаграмма получена. DatagramTerminateMode
по умолчанию
on
, что означает, что операция чтения завершает работу, когда дейтаграмма получена. Чтобы считать несколько дейтаграмм целиком, можно установить DatagramTerminateMode
к off
. В этом примере записаны две дейтаграммы. Отметьте, только вторая дейтаграмма отправляет Terminator
символ.
fprintf(u, '%s', 'Request Time'); fprintf(u, '%s\n', 'Request Time');
Начиная с DatagramTerminateMode
off
fscanf
будет читать через дейтаграммные контуры до Terminator
символ получен.
u.DatagramTerminateMode = 'off'; data = fscanf(u) data = Request TimeRequest Time
InputBufferSize
свойство задает максимальное количество байтов, которые можно считать из сервера. По умолчанию, InputBufferSize
512
.
u.InputBufferSize ans = 512
ValuesReceived
свойство указывает на общее количество значений, считанных из сервера, включая терминатор строки.
u.ValuesReceived ans = 43
Если вы закончены с объектом UDP, отключаете его от сервера, удаляете его из памяти и удаляете его из рабочей области. Если вы используете сервер эха, выключаете его.
fclose(u); delete(u); clear u
echoudp('off');