Comment construire un chat simple en utilisant netcat?

27

Je travaille actuellement sur un projet et j'ai implémenté une application de chat simple en utilisant les netcatbibliothèques.

Le client est invité à saisir le numéro de port et la commande

nc -l -p xxxx

xxxxest le numéro de port entré par le client.

De même, l'hôte est invité à saisir le même numéro de port et une connexion est établie à l'aide de

nc <ip_address> -p xxxx

Cependant, cela donne une expérience de chat vide car il n'affiche pas le nom d'utilisateur de la personne qui tape les messages, quelque chose comme

hey
hello
what's up
Nothing

Au lieu de cela, je veux que ce soit quelque chose comme,

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

Puis-je utiliser netcatpour obtenir cette fonctionnalité ou y a-t-il autre chose qui le fait?

Sachin Kamath
la source
1
ncne sait pas usernameet ne peut pas l'envoyer. Seul peut faire est de taper le message au format Bob: hello.
2707974
Je veux éviter cette chose exacte. Je suis également ouvert à d'autres programmes pouvant atteindre les mêmes fonctionnalités.
Sachin Kamath
Essayez de trouver une solution dans cette réponse
2707974

Réponses:

34

Vous pouvez faire quelque chose comme ça.

Supposons qu'Alice soit le serveur. Elle tape:

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

Ensuite, Bob se connecte à ce serveur. Il tape:

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

Les mawklignes ajoutent simplement le nom précédant de la personne au "chat". Nous devons -W interactivedéfinir des écritures non tamponnées sur stdout et des lectures tamponnées sur ligne depuis stdin.


Maintenant, Alice tape Hi Bobet voit:

Hi Bob

Bob voit:

Alice: Hi Bob

Bob tape Hi Aliceet voit:

Alice: Hi Bob
Hi Alice

Alice voit:

Hi Bob
Bob: Hi Alice
le chaos
la source
2
nc ne peut pas utiliser -s et -l en même temps. le -s n'est pas requis.
Sachin Kamath
I got awk: option `-W interactive 'non reconnue, ignorée
zt1983811
@ zt1983811 vous avez besoin de GNU awk, non mawk.
chaos
@chaos J'ai utilisé awk awk -W interactif '$ 0 = "Alice:" $ 0' | port ip nc -lvk; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 juin 27 06:48 / usr / bin / awk -> / etc / alternatives / awk
zt1983811
1
@ zt1983811 C'est une mawkoption, non gawk. L'avez-vous essayé en utilisant mawkexplicitement?
dessert du