The -l (listen) switches netcat into server mode. I was a bit
confused by the <host> and <port> arguments to nc -l. It turns
out that they do not specify which address netcat binds to; they limit
the connecting host. Something like

a$ nc -l -p 8080 b.example.net 12345

will only accept connections originating from port 12345 on
b.example.net.

Echo text to that port

b$ echo 'hi there' | nc -q 1 a.example.net 8080

To connect from a specific port, use the -p option.

b$ echo 'hi there' | nc -q 1 -p 12345 a.example.net 8080

The -q 1 tells netcat to quit after an EOF is detected. When the
client quits, the connection breaks, and the server goes down on its
own. If you want netcat to stay up you'll have to restart it: