In its most basic form, Ncat simply moves bits from one place to
another. This is all that is needed to set up a simple chat system. By
default, Ncat reads from
and writes to
meaning that it will send whatever is typed at the keyboard and will
show on the screen whatever is received.
- Two-user chat
With this setup, two users can communicate with each other. Whatever
one types will appear on the screen of the other. Be aware that
standard input is probably line-buffered so it may be necessary to press
enter before a line is sent. Which side listens
and which side connects is not important in this situation, except that the listener must start ncat first.
The above technique is limited to one-on-one conversations. If more
users connect to the server, each one will effectively create a new
chat channel with the server; none of the connecting users will hear
each other. Multi-user chatting is easily supported using connection
brokering with the
--broker option (see
the section called “Connection Brokering”). In broker mode, anything received on
one connection is sent out to all other connections, so everyone can
talk with everyone else.
When many users are chatting through a connection broker, it can be
hard to know who is saying what. For these cases Ncat provides a simple
hack to tell users apart. When the
option is given, connection brokering is automatically enabled. Each
message received is prefixed with an ID before being relayed to all
other clients. The ID is unique for each client connection, and
therefore functions something like a username. Also, in chat mode any
control characters are escaped so they won't mess up your terminal.
The server is started with
Once the server is started, this is how the chat appears to one of the
connected users. The lines that begin with
<user are from
other connected users. The line beginning with
<user0> was sent by the listening broker.
<user6> Is anyone there?
<user5> Me too.
<user0> Go away, all of you.
The user IDs generated by Ncat are based on the file descriptor for
each connection, and must be considered arbitrary. There is no way to
choose a particular ID or make one persist across sessions.
--chat can come in handy for those
quick multi-user conversations.