« Отговор #18 -: Oct 25, 2019, 18:48 »
> Бе не я разбрах супер тая команда,
Ще се опитам да обясня команда като започна с описание на проблема който решава. Ако имате мрежови протокол при който командите са само един байт, както и отговорите на тези команди и не ви се пише собствена програма за изпращане и получаване то може да използвате командата по-долу.
stty -icanon && stdbuf -i0 -o0 nc HOST POST
За пример ще дефинирам следния протокол:
- Сървър слуша на localhost порт 1000
- Клиент се свърза към сървър.
- Комуникацията може да започне СЛЕД като сървъра изпрати един байт. Да речем R.
- Клиентът може да изпрати команда към сървъра която е пак само един байт. Примерно S за показване на текущото състояние на сензор.
- Сървър отговаря с един байт което е текущото състояние на сензора.
По принцип може да използвате NetCat да се свърже със сървъра и да слуша на определения порт по TCP:
nc localhost 10000
Но, проблем номер едно е, че ако сървъра изпраща само 1 байт към вас, то ще има да го чакате докато се напълни буфера. Има начин за всяка мрежова програма да се промени размера на буфера. С помощта на командата по-долу входния и изходния буфер ще са с размер нула. Тоест - изпращаи и получавай веднага.
stdbuf -i0 -o0 програма
Ако се използва само тази команда
stdbuf -i0 -o0 nc localhost 10000
Стигаме до втория проблем. Който е, че самия терминал чака за нов ред за да изпрати командите от мен (в ролята на мрежовия клиент). Това също може да се забрани като се използва
stty -icanon
И така с командата по-долу
stty -icanon && stdbuf -i0 -o0 nc localhost 10000
Може безпроблемно да получавате и изпращате малки самотни байтове по мрежата.
Надявам са все някога командата да помогне на някой. На мен ми отне няколко дълги минути да намеря точното решение.