Se o que você quer fazer é transferir 2 arquivos com apenas 1 conexão, você terá que usar um marcador para separar os arquivos no fluxo de dados, já que o fim de arquivo é uma leitura de comprimento 0 que o netcat use para fechar o soquete.
Control-D
pode ser o que você pode digitar em um terminal para significar fim de arquivo, mas não gera um caractere, ele encerra a leitura com um comprimento de 0. Não há Control-D
nos dados stream.
Para transferir 2 arquivos simplesmente, você pode usar um comando de empacotamento existente como tar
. Use nc -k -l 4458 -v -c 'tar xf - >&2'
como seu receptor e tar cf - foo bar
como seu remetente. (Como os nomes dos arquivos vêm do remetente, você deve confiar no remetente).
Como alternativa, se seus arquivos forem simples, você poderá introduzir uma linha especial para separar os dois arquivos. Por exemplo, no remetente cat foo; echo bye; cat bar
e no receptor algo como
nc -k -l 4458 -v -c 'awk -v file=foo '\''/^bye$/{ file="bar";next }{print >file}'\'
Este script GNU awk contém o primeiro nome de arquivo na variável file
, então quando ele vê a linha "bye" ele muda para o segundo nome de arquivo.