Як побудувати простий чат за допомогою netcat?


27

Зараз я працюю над проектом, і я реалізував просту програму чату за допомогою netcatбібліотек.

Клієнту пропонується ввести номер порту та команду

nc -l -p xxxx

де xxxxномер порту, введений клієнтом.

Аналогічно, хосту пропонується ввести той самий номер порту і встановити з'єднання за допомогою

nc <ip_address> -p xxxx

Однак це дає порожній досвід чату, оскільки він не показує ім’я користувача особи, яка набирає повідомлення, щось подібне

hey
hello
what's up
Nothing

Натомість я хочу, щоб це було щось на зразок,

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

Чи можу я використати netcatдля досягнення цієї функціональності чи є ще щось, що робить це?


1
ncне знає usernameі не може надіслати його. Можна лише ввести повідомлення у форматі Bob: hello.
2707974

Я хочу уникати саме цієї речі. Я також відкритий для альтернативних програм, які можуть досягти однакової функціональності.
Сахін Камат

Спробуйте знайти рішення у цій відповіді
2707974,

Відповіді:


34

Можна зробити щось подібне.

Припустимо, Аліса - сервер. Вона типів:

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

Потім Боб підключається до цього сервера. Він типів:

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

У mawkлінії тільки додає Попереджання ім'я людини в «чаті». Нам потрібно -W interactiveвстановити незаблоковані записи до stdout, а рядкові буферизовані читання від stdin.


Тепер Аліса набирає Hi Bobта бачить:

Hi Bob

Боб бачить:

Alice: Hi Bob

Боб набирає Hi Aliceта бачить:

Alice: Hi Bob
Hi Alice

Аліса бачить:

Hi Bob
Bob: Hi Alice

2
nc не може використовувати -s і -l одночасно. -s не потрібно.
Sachin Kamath

Я отримав awk: нерозпізнаний варіант `-W interactive ', проігноровано
zt1983811

@ zt1983811 вам потрібен GNU awk, ні mawk.
хаос

@chaos я використовував awk awk -W interactive '$ 0 = "Alice:" $ 0' | nc -lvk ip порт; ls -al / usr / bin / awk lrwxrwxrwx 1 корінь кореня 21 червня 27 06:48 / usr / bin / awk -> / тощо / альтернативи / awk
zt1983811

1
@ zt1983811 Це mawkваріант, ні gawk. Ви спробували це, використовуючи mawkявно?
десерт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.