Как построить простой чат с помощью 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 не требуется.
Сачин Камат
Я получил awk: параметр `-W интерактивный 'не распознан, проигнорирован
zt1983811
@ zt1983811 тебе нужен GNU awk, а не mawk.
хаос
@chaos Я использовал awk awk -W интерактивный '$ 0 = "Алиса:" $ 0' | nc -lvk ip port; ls -al / usr / bin / awk lrwxrwxrwx 1 root root 21 июня 27 06:48 / usr / bin / awk -> / etc / alternatives / awk
zt1983811
1
@ zt1983811 Это mawkвариант, а не gawk. Вы пробовали использовать mawkявно?
десерт