Como criar um chat simples usando o netcat?


27

Atualmente, estou trabalhando em um projeto e implementei um aplicativo de bate-papo simples usando as netcatbibliotecas.

O cliente é solicitado a inserir o número da porta e o comando

nc -l -p xxxx

onde xxxxé o número da porta digitada pelo cliente.

Da mesma forma, o host solicita o mesmo número de porta e uma conexão é estabelecida usando

nc <ip_address> -p xxxx

No entanto, isso proporciona uma experiência de bate-papo em branco, pois não mostra o nome de usuário da pessoa digitando as mensagens, algo como

hey
hello
what's up
Nothing

Em vez disso, quero que seja algo como,

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

Posso usar netcatpara obter essa funcionalidade ou há mais alguma coisa que faça isso?


1
ncnão sabe usernamee não pode enviá-lo. Só pode fazer é digitar a mensagem no formato Bob: hello.
2707974

Eu quero evitar exatamente isso. Também estou aberto a programas alternativos que podem alcançar a mesma funcionalidade.
Sachin Kamath

Tente encontrar a solução nesta resposta
2707974

Respostas:


34

Você pode fazer algo assim.

Suponha que Alice seja o servidor. Ela digita:

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

Então Bob se conecta a esse servidor. Ele digita:

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

As mawklinhas apenas adicionam o nome da pessoa ao "chat". Precisamos -W interactivedefinir gravações sem buffer para stdout e leituras em buffer de linha de stdin.


Agora Alice digita Hi Bobe vê:

Hi Bob

Bob vê:

Alice: Hi Bob

Bob digita Hi Alicee vê:

Alice: Hi Bob
Hi Alice

Alice vê:

Hi Bob
Bob: Hi Alice

2
O nc não pode usar -s e -l ao mesmo tempo. o -s não é necessário.
Sachin Kamath

Eu tenho awk: opção `-W interativo' não reconhecido, ignorado
zt1983811

@ zt1983811 você precisa do GNU awk, não mawk.
caos

@chaos eu usei awk awk -W interativo '$ 0 = "Alice:" $ 0' | porta ip nc -lvk; ls -al / usr / bin root / awk lrwxrwxrwx 1 raiz 21 27 de junho 06:48 / usr / bin / awk -> / etc / alternatives / awk
zt1983811

1
@ zt1983811 Esta é uma mawkopção, não gawk. Você tentou usando mawkexplicitamente?
dessert
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.