Jak zbudować prosty czat za pomocą NetCat?

27

Obecnie pracuję nad projektem i zaimplementowałem prostą aplikację do czatowania przy użyciu netcatbibliotek.

Klient zostanie poproszony o podanie numeru portu i polecenia

nc -l -p xxxx

gdzie xxxxjest numerem portu wprowadzonym przez klienta.

Podobnie host jest monitowany o ten sam numer portu i połączenie jest nawiązywane za pomocą

nc <ip_address> -p xxxx

Daje to jednak czysty czat, ponieważ nie pokazuje nazwy użytkownika wpisującego wiadomości, coś w rodzaju

hey
hello
what's up
Nothing

Zamiast tego chcę, żeby to było coś w stylu,

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

Czy mogę użyć, netcataby osiągnąć tę funkcjonalność, czy jest coś jeszcze, co to robi?

Sachin Kamath
źródło
1
ncnie wiem usernamei nie mogę go wysłać. Można tylko wpisać wiadomość w formacie Bob: hello.
2707974,
Chcę tego dokładnie uniknąć. Jestem również otwarty na alternatywne programy, które mogą osiągnąć tę samą funkcjonalność.
Sachin Kamath,
Spróbuj znaleźć rozwiązanie w tej odpowiedzi
2707974,

Odpowiedzi:

34

Możesz zrobić coś takiego.

Załóżmy, że Alice jest serwerem. Ona pisze:

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

Następnie Bob łączy się z tym serwerem. On pisze:

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

Te mawklinie tylko dodaje nazwę poprzedzenie osoby do „chat”. Musimy -W interactiveustawić niebuforowane zapisy na standardowe i buforowane liniowo odczyty ze standardowego wejścia.


Teraz Alice pisze Hi Bobi widzi:

Hi Bob

Bob widzi:

Alice: Hi Bob

Bob typy Hi Alicei widzi:

Alice: Hi Bob
Hi Alice

Alice widzi:

Hi Bob
Bob: Hi Alice
chaos
źródło
2
nc nie może używać jednocześnie -s i -l. -s nie jest wymagane.
Sachin Kamath,
Mam awk: opcja `-W interaktywna 'nierozpoznana, zignorowana
zt1983811
@ zt1983811 potrzebujesz GNU awk, a nie mawk.
chaos
@chaos Użyłem awk awk -W Interactive '$ 0 = "Alice:" 0 0 "| nc -lvk port ip; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 czerwca 27 06:48 / usr / bin / awk -> / etc / alternatives / awk
zt1983811
1
@ zt1983811 To nie jest mawkopcja gawk. Czy próbowałeś tego mawkjawnie?
deser