Netcat как многопоточный сервер

17668
etuardu

Я использую netcat для запуска простого сервера, подобного этому:

while true; do nc -l -p 2468 -e ./my_exe; done

Таким образом, любой может подключиться к моему хосту через порт 2468 и поговорить с «my_exe».
К сожалению, если кто-то еще захочет подключиться во время открытого сеанса, он получит ошибку «Отказано в соединении», потому что netcat больше не слушает до следующего цикла while.

Есть ли способ заставить netcat вести себя как многопоточный сервер, то есть всегда при прослушивании входящих соединений? Если нет, есть ли обходные пути для этого?

10
You can use socat sivann 8 лет назад 0

3 ответа на вопрос

16
akira

вы используете не тот инструмент для этой задачи: используйте что-то вроде ucspi-tcp, особенно tcpserver :

tcpserver waits for incoming connections and, for each connection,  runs a program of your choice. 
Где это было всю мою жизнь ?! Sridhar-Sarnobat 7 лет назад 1
3
Mox

Хотя вы не упомянули операционную систему, которую используете, я предполагаю, что это Linux или Unix, основываясь на синтаксисе вашего примера команды оболочки.

Если в вашей системе работает xinetd (или его предшественник inetd ), вы можете использовать это программное обеспечение для прослушивания соединения на выбранном вами порту и запустить исполняемый файл для ответа. С xinetd / inetd у вас есть возможность разрешить несколько одновременных подключений, каждое из которых обслуживается отдельным экземпляром вашего исполняемого файла.

-2
nairb

Скорее всего, вы могли бы просто фоновый процесс (тогда он не ждет возврата, прежде чем перейти к следующему циклу) с «&», такие как:

while true; do nc -l -p 2468 -e ./my_exe &; done 
Это порождает множество подпроцессов и приводит к краху системы .... jackweirdy 12 лет назад 7
И только первый вызов будет работать; каждый последующий сбой, потому что на порту 2468 уже есть сокет сервера. Daniel Griscom 8 лет назад 3