Бывает, нужно быстро написать сетевое приложение; или поддержать сетевой протокол (специфический) или девайс. Или соединить быстро и наипростейшим способом наладить взаимодействие через сеть между двумя прогами. Как это сделать быстро?
Первый способ – xinetd
Для Unix
Если нет ограничений, выбираем текстовый протокол, строчно-ориентированный. (фразы протокола делятся на строки, в строке разделителем \t, На конце – \r\n). Серверное приложение будет представлять собой консольную программу, которая вообще ничего не знает про сеть (магия Unix и xinetd в частности!). Вводит со стандартного stdin, выводит – на stdout. Осталось написать конфиг для программы как службы в /etc/xinetd.conf, и дело в шляпе. Работу по сети можно проверить с помощью telnet, законнектившись на выбранный порт. Ввод и вывод фраз – ручками. Вот и вся механика. Клиента можно организовать аналогичным образом, запустив подпроцесс через popen, а стандартные порты заменить на сокет.
Для Windows
Ну, потратьте целых 5 минут и напишите упрощенный аналог xinetd для Windows. Это довольно просто. (Можете воспользоваться моим.) Дальше тоже самое.
Второй способ – программа на Erlang
В Эрланге сделана совершенно потрясная поддержка сети. Не пожалейте времени, изучите Erlang. Текстовый протокол или бинарный – мощные возможности по сопоставлению бинарных данных, битовых масок и разделения протокола на фразы позволят Вам написать протокол любой сложности за кратчайшее время!
Третий способ – http как субстрат
Берем старый добрый HTTP. Тратим 5 минут на курение мануала и решение, чего и как будем через него передавать (формат данных). Дальше смотрим на платформу:
Linux / Unix
Клиент – курим библиотеку libCURL. Там все крайне просто. Серверная сторона – cgi для Apache. Все достаточно тривиально.
Windows
Клиент – API для доступа по HTTP, называется WinHTTP. Впрочем, CURL как мультиплатформенный,тоже подойдет.
Так, софт сделали, что дальше?
Дальше будем вылавливать (или тестировать) косяки, которые толпами всплывут на медленных линиях, радиолиниях, криптошлюзах и спутниках. Неоценимый тул для отлова сетевый косяков, связанных с таймаутами, обрывами и прочим коммуникационным дерьмом – два модема (да-да!) USR Courier, связанных выделенной линией(AT&L2 или что-то в этом роде) Впрочем, если у вас офисная АТС, дозвон тоже подойдет. Соединяемся, запускаем клиент и сервер, и рвем линию физически. Любуемся на отсосы, думаем, правим код, курим мануалы и книги…
Также рекомендую интеллектуальный свитч. В его состав обязательно входит шейпер, с помощью которого скорость потока можно ограничить. При наличии прямых рук на Linux такую штуку тоже можно сделать, но нам ведь надо быстро, правда?
Happy coding
Tags: Сети