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
peterh
  • 9,488
  • 16
  • 59
  • 88
henriquehbr
  • 818
  • 2
  • 9
  • 28

1 Answers1

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

henriquehbr
  • 818
  • 2
  • 9
  • 28
  • so final command is ` nc -vv -k -l -p 5678` – BMW Jun 15 '21 at 03:10
  • 1
    Is this `-k` option standard? I don't see it anywhere – smac89 Jan 14 '22 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 – henriquehbr Jan 15 '22 at 23:17