¿Cómo construir un chat simple usando netcat?


27

Actualmente estoy trabajando en un proyecto y he implementado una aplicación de chat simple usando las netcatbibliotecas.

Se le solicita al cliente que ingrese el número de puerto y el comando

nc -l -p xxxx

donde xxxxestá el número de puerto ingresado por el cliente.

Del mismo modo, se le solicita al host el mismo número de puerto y se establece una conexión utilizando

nc <ip_address> -p xxxx

Sin embargo, esto proporciona una experiencia de chat en blanco, ya que no muestra el nombre de usuario de la persona que escribe los mensajes, algo así como

hey
hello
what's up
Nothing

En cambio, quiero que sea algo como,

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

¿Puedo usar netcatpara lograr esta funcionalidad o hay algo más que haga esto?


1
ncNo lo sé usernamey no puedo enviarlo. Lo único que puede hacer es escribir el mensaje en formato Bob: hello.
2707974

Quiero evitar eso exactamente. También estoy abierto a programas alternativos que pueden lograr la misma funcionalidad.
Sachin Kamath

Intenta encontrar una solución en esta respuesta
2707974

Respuestas:


34

Puedes hacer algo como esto.

Supongamos que Alice es el servidor. Ella tipos:

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

Entonces Bob se conecta a ese servidor. El teclea:

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

Las mawklíneas simplemente agregan el nombre anterior de la persona al "chat". Necesitamos -W interactiveestablecer escrituras sin búfer en stdout y lecturas con búfer de línea desde stdin.


Ahora Alice escribe Hi Boby ve:

Hi Bob

Bob ve:

Alice: Hi Bob

Bob teclea Hi Alicey ve:

Alice: Hi Bob
Hi Alice

Alice ve:

Hi Bob
Bob: Hi Alice

2
nc no puede usar -s y -l al mismo tiempo. el -s no es obligatorio.
Sachin Kamath


@ zt1983811 necesitas GNU awk, no mawk.
caos

@chaos Utilicé awk awk -W interactivo '$ 0 = "Alice:" $ 0' | puerto ip nc -lvk; ls -al / usr / bin / awk lrwxrwxrwx 1 raíz raíz 21 jun 27 06:48 / usr / bin / awk -> / etc / alternative / awk
zt1983811

1
@ zt1983811 Esta es una mawkopción, no gawk. ¿Lo intentaste usando mawkexplícitamente?
postre
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.