Я хочу прочитать данные, поступающие на определенный порт TCP на неопределенный срок, и сбросить данные в файл. Я пробовал много разных вариаций nc но у меня не получилось. По большей части я не получаю никаких ошибок на консоли. Ниже я попробовал:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

Ценю твою помощь..

2 ответа2

0

экран слева

nc -l 1234 запускает сервер.

на экране справа nc 127.0.0.1 1234 подключается.

похоже, вы ошиблись своими командами.

Также стоит знать, используете ли вы gnu one или bsd, мой bsd. man nc показывает «Руководство по общим командам NC(1) BSD». Чтобы запустить сервер на GNU, ему может понадобиться -l с -p. Чтобы подключить клиента к серверу через какой-либо порт, никогда не используйте -p.

Вы также можете использовать -v

Ваша непосредственная проблема заключалась в том, что вы вообще не запускали его.

Ваш вопрос требует, чтобы он был неопределенным, и я хотел бы отметить, что если вы выполните Ctrl-C на стороне клиента, то, кроме разрыва соединения, он остановит сервер. Вы можете поместить этот сервер прослушивания в цикл. Это работает. Итак, сервер продолжает прослушивать и все еще там, если вы попытаетесь подключиться снова после Ctrl-C от клиента.

0

Я хочу читать данные, поступающие на определенный порт TCP на неопределенный срок

Это на самом деле не имеет смысла ... если вы после всех данных, поступающих на порт UDP, то хорошо - TCP, однако, является протоколом на основе соединения. Как только клиент подключается, и вы accept() , вы получаете два сокета - один для прослушивания и один для подключения к клиенту ... nc закроет исходный сокет для прослушивания и будет работать с клиентом один на один.


Если вы хотите прослушивать подключение нескольких клиентов, попробуйте использовать socat:

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

Это настроит прослушивающий сокет и подключит новый процесс к соединению - сохраняя прослушивающий сокет. Все полученные данные будут записаны в стандартный вывод (дескриптор файла 1), который перенаправляется в ../myfile для добавления.

ПРИМЕЧАНИЕ: данные будут получены от любого количества клиентов, в не гарантированном порядке, без обрамления ... то есть: это будет беспорядок перемешанных данных, если у вас более одного клиента одновременно.


Если вы хотите, чтобы socat обработал файл для вас, вы можете использовать один из CREATE или OPEN (см. Справочную страницу):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

Если вы довольны подходом « один клиент за раз », поместите nc в цикл:

while :; do nc -l 12345; done >> ../myfile

Проверьте это с помощью nc:

nc localhost 12345

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