Содержание
Здесь расположена диагностическая
утилита udpio, созданная
для
запуска сервера или клиента, работающего с сообщениями (датаграммами)
UDP.
Утилита кроссплатформенная (Linux и Windows), написана на чистом C.
Утилита udpio:
Работает в режиме сервера или клиента UDP.
Позволяет посылать в заданные сокеты UDP
датаграммы, заданные
через аргументы командной строки, либо переданные через канал
stdin.
Позволяет принимать из сети датаграммы UDP.
При приемо-передаче отображается адрес (куда или откуда) идет передача.
Отображение принятых данных в разных форматах (str|hex|HEX).
Задание таймаутов приемо-передачи.
Задание циклического или конечного (одноразового или многоразового) режима работы приемо-передачи.
Общая схема вызова:
unix udpio [-option [value]] …
В программе udpio опции вида
-host или вида
--host
считаются эквивалентными, можно использовать обе.
Некоторые опции обязательны, другие нет.
Некоторые опции имеют параметры.
Если опция имеет параметр, то указание параметра обязательно.
--versionОпция --version печатает версию
программы:
> unix udpio --help
udpio version 1.0--helpОпция --help печатает справку по
программе:
> unix udpio --help
udpio version 1.0
Copyright (c) 2026 Alex Kuryakin daqgroup@mail.ru
Utility to send/receive UDP datagrams.
Usage: udpio [options]
Options:
-client - run as client
-server - run as server
-host IP - set host IP address for bind|connect
address "*" means 0.0.0.0 on server
(any interface) or 255.255.255.255
on client (broadcast).
-port N - set port number N in range 1..65535
-send line - add line to message to send to host
-loop n - try loop n times, n=0 is forever
-rcvtimeo ms - set recv timeout ms, milliseconds
-sndtimeo ms - set send timeout ms, milliseconds
-rcvmode m - set recv printing mode m (str|hex|HEX)
-sndmode m - set send printing mode m (str|hex|HEX)
Examples:
udpio -server -host "*" -port 5000 -send "Reply!" -send "Done" -loop 0 -sndmode hex -rcvmode hex
udpio -client -host "*" -port 5000 -send "Hello world!" -send "Ok" -loop 1 -rcvtimeo 10000 -sndtimeo 10000
printf "Hello world.\nI am Ok.\n" | udpio -client -host "*" -port 5000 -loop 1 -rcvtimeo 10000 -sndtimeo 10000--serverОпция --server задает режим работы в
качестве сервера.
Сервер “слушает” сеть и отвечает на запросы от клиентов.
Это определяет логику работы программы.
При вызове необходимо указать режим работы (клиент или сервер),
иначе возникнет ошибка.
--clientОпция --client задает режим работы в
качестве клиента.
Клиент посылает запросы заданному серверу и получает ответы.
Это определяет логику работы программы.
При вызове необходимо указать режим работы (клиент или сервер),
иначе возникнет ошибка.
--host IPОпция --host IP задает
IP адрес или имя сервера.
Для сервера указывается адрес привязки (bind),
который
будет “прослушивать” сервер. Часто этот адрес задается в виде
строки "*", что означает
0.0.0.0 - “любой адрес”,
что означает, что прослушиваться будут все сетевые интерфейсы.
Для клиента указывается адрес сервера, куда будет подключаться
(connect) клиент. Это может быть IP
адрес или имя сервера,
прописанное в hosts или зарегистрированное в
DNS.
Для посылки широковещательных сообщений этот адрес задается в виде
строки "*", что означает
255.255.255.255 - “любой адрес”,
что означает, что сообшение будет послано всем компьютерам в сети.
--port NОпция --port N задает
IP порт обслуживания.
Допустимые порты - числа в диапазоне
[1 … 65535].
--send "line"Опция --send "line" задает строку
текста line для посылки в сеть.
Строк может несколько, они собираются в один текст, разделенный
EOL.
Для сервера это текст сообщения, который он посылает клиентам в ответ на запросы.
Для клиента это текст сообщения - запроса, который он посылает серверу.
Для задания сообщения вместо -send …
можно использовать запись в канал.
Это более предпочтительный способ, т.к. канал позволяет передавать
произвольные
двоичные данные, а не только текст.
--loop NОпция --loop N задает одноразовый,
многоразовый или циклический режим работы.
При значении N=1 цикл посылки сообшения и чтения
ответной UDP датаграммы
делается однократно. Этот режим хорош для клиентов, выполняющих
одноразовый
запрос к серверу.
При значении N>1 цикл посылки и чтения UDP датаграмм делается N раз.
При значении N=0 цикл посылки сообшений и чтения
ответных UDP датаграмм
делается бесконечным (до явного прерывания программы).
Этот режим хорош для сервера, отвечающего на запросы клиентов
в бесконечном цикле обслуживания.
--rcvtimeo TОпция --rcvtimeo T задает таймаут
(миллисекунд)
для ожидания при приеме датаграмм UPD.
Нулевое значение T означает “ждать вечно”.
Это значение “по умолчанию”.
Если таймаут не нулевой, то в случае таймаута:
-loop 0 ошибка не
регистрируется,--sndtimeo TОпция --sndtimeo T задает таймаут
(миллисекунд)
для ожидания при передаче датаграмм UPD.
--rcvmode MОпция --rcvmode M задает режим вывода
принятых сообщений:
--rcvmode str - вывод в виде строки
текста (по умолчанию),
--rcvmode hex - вывод в виде
hex-дампа и строки теста (примерно как делает
hexdump -C),
--rcvmode HEX - вывод в виде
hex-encode, без текста
--sndmode MОпция --sndmode M задает режим вывода
посланных сообщений.
Работает аналогично --rcvmode M.
# Запускаем СЕРВЕР в одной консоли:
unix udpio -server -host "*" -port 5000 -send "Reply!" -send "Done" -loop 0 -rcvmode hex -sndmode hex
# Запускаем КЛИЕНТ в другой консоли (сообщение в аргументах):
unix udpio -client -host "*" -port 5000 -send "Hello world! I am UDP client." -send "Ok" -loop 1 -rcvtimeo 10000 -sndtimeo 10000
# Другой способ запуска КЛИЕНТА (сообщение передается по каналу):
printf "Hello world! I am UDP client.\nOk" | unix udpio -client -host "*" -port 5000 -loop 1 -rcvtimeo 10000 -sndtimeo 10000
# В окне консоли КЛИЕНТА:
### Sent 32 byte(s) to [255.255.255.255:5000]:
Hello world! I am UDP client.
Ok
### Recv 11 byte(s) from [192.168.0.80:5000]:
Reply!
Done
# В окне консоли СЕРВЕРА:
### Recv 32 byte(s) from [192.168.0.80:47831]:
0000: 48 65 6c 6c 6f 20 77 6f 72 6c 64 21 20 49 20 61 | Hello.world!.I.a |
0010: 6d 20 55 44 50 20 63 6c 69 65 6e 74 2e 0a 4f 6b | m.UDP.client..Ok |
### Sent 11 byte(s) to [192.168.0.80:47831]:
0000: 52 65 70 6c 79 21 0a 44 6f 6e 65 | Reply!.Done |Пользуйтесь на здоровье.
CrwDaq Copyright (с) 2001-2026 DaqGroup daqgroup@mail.ru