14

I have two files, client.sh and server.sh. All the necessary data is on the server, which is sent to the client using netcat. The client just get these data and display it to the end user. The problem is, when I try to show the dialog loading screen from the server to the client:

server.sh

# CLIENT PORT: 8765
# SERVER PORT: 5678

while :
do
    touch registered_users data

    nc -vv -l -p 5678 > data

    case `cat data` in
        "SPLASH_SCREEN")
            for ((i=0;i<100;i++))
            do
                echo $i
            done | dialog --title 'Loading...' --gauge 'Welcome!' 8 40 0 > /dev/tcp/127.0.0.1/8765
        ;;
    esac
done

client.sh

# CLIENT PORT: 8765
# SERVER PORT: 5678

echo "SPLASH_SCREEN" > /dev/tcp/127.0.0.1/5678

while :
do
    nc -l -p 8765 > server_response
    cat server_response
done

1 Answer 1

23

Solved it! just had to use the -k option

 -k    Forces nc to stay listening for another connection after its current
       connection is completed.  It is an error to use this option without the
       -l option.

EDIT: This answer assumes you're using openbsd-netcat, some versions like gnu-netcat have a reduced set of features, hence some flags like -k might not be present, package names might vary according to your distro

3
  • so final command is ` nc -vv -k -l -p 5678`
    – BMW
    Jun 15, 2021 at 3:10
  • 1
    Is this -k option standard? I don't see it anywhere
    – smac89
    Jan 14, 2022 at 21:19
  • 1
    @smac89 depends on the netcat version you're using, on the man pages i found, all of them had the -k option, remember that some things might differ between the BSD netcat and the GNU one Jan 15, 2022 at 23:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .