Come costruire una semplice chat usando netcat?


27

Attualmente sto lavorando a un progetto e ho implementato una semplice applicazione di chat utilizzando le netcatlibrerie.

Al client viene richiesto di inserire il numero di porta e il comando

nc -l -p xxxx

dove si xxxxtrova il numero di porta inserito dal client.

Allo stesso modo, all'host viene richiesto lo stesso numero di porta e viene stabilita una connessione tramite

nc <ip_address> -p xxxx

Tuttavia, questo offre un'esperienza di chat vuota in quanto non mostra il nome utente della persona che digita i messaggi, qualcosa del genere

hey
hello
what's up
Nothing

Invece, voglio che sia qualcosa di simile,

Foo : hey
Boo : hello
Foo : what's up
Boo : Nothing

Posso usare netcatper ottenere questa funzionalità o c'è qualcos'altro che lo fa?


1
ncnon noto usernamee non posso inviarlo. L'unica cosa che può fare è digitare il messaggio nel formato Bob: hello.
2707974

Voglio evitare quella cosa esatta. Sono anche aperto a programmi alternativi che possono ottenere la stessa funzionalità.
Sachin Kamath,

Cerca di trovare una soluzione in questa risposta
2707974,

Risposte:


34

Puoi fare qualcosa del genere.

Supponiamo che Alice sia il server. Lei scrive:

mawk -W interactive '$0="Alice: "$0' | nc -l -p <port_number> <ip_of_alice>

Quindi Bob si connette a quel server. Digita:

mawk -W interactive '$0="Bob: "$0' | nc <ip_of_alice> <port_number>

Le mawkrighe aggiungono semplicemente il nome anteposto della persona alla "chat". Dobbiamo -W interactiveimpostare le scritture senza buffer su stdout e allineare le letture bufferizzate da stdin.


Ora Alice digita Hi Bobe vede:

Hi Bob

Bob vede:

Alice: Hi Bob

Bob scrive Hi Alicee vede:

Alice: Hi Bob
Hi Alice

Alice vede:

Hi Bob
Bob: Hi Alice

2
nc non può usare -s e -l contemporaneamente. il -s non è richiesto.
Sachin Kamath,

I got awk: opzione `-W interattivo 'non riconosciuta, ignorata
zt1983811

@ zt1983811 avete bisogno di GNU awk, non è mawk.
caos,

@chaos Ho usato awk awk -W interattivo '$ 0 = "Alice:" $ 0' | nc -lvk porta ip; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 giu 27 06:48 / usr / bin / awk -> / etc / alternatives / awk
zt1983811

1
@ zt1983811 Questa è mawkun'opzione, non gawk. L'hai provato usando mawkesplicitamente?
dessert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.