11

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

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

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

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

3 ответа3

16

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

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
3

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

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

-2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .