Skip to content

Latest commit

 

History

History
 
 

hw11_telnet_client

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Домашнее задание №11 «Клиент TELNET»

Необходимо реализовать крайне примитивный TELNET клиент (без поддержки команд, опций и протокола в целом).

Примеры вызовов:

$ go-telnet --timeout=10s host port
$ go-telnet mysite.ru 8080
$ go-telnet --timeout=3s 1.1.1.1 123
  • Программа должна подключаться к указанному хосту (IP или доменное имя) и порту по протоколу TCP.
  • После подключения STDIN программы должен записываться в сокет, а данные, полученные из сокета, должны выводиться в STDOUT - всё происходит конкурентно.
  • Опционально в программу можно передать таймаут на подключение к серверу (через аргумент --timeout) - по умолчанию 10s.
  • При нажатии Ctrl+D программа должна закрывать сокет и завершаться с сообщением.
  • При получении SIGINT программа должна завершать свою работу.
  • Если сокет закрылся со стороны сервера, то при следующей попытке отправить сообщение программа должна завершаться (допускается завершать программу после "неудачной" отправки нескольких сообщений).
  • При подключении к несуществующему серверу, программа должна завершаться с ошибкой соединения/таймаута.

При необходимости можно выделять дополнительные функции / ошибки.

Примеры работы:

  1. Сервер обрывает соединение
$ nc -l localhost 4242
Hello from NC
I'm telnet client
Bye, client!
^C
$ go-telnet --timeout=5s localhost 4242
...Connected to localhost:4242
Hello from NC
I'm telnet client
Bye, client!
Bye-bye
...Connection was closed by peer

Здесь сообщения

Hello from NC
Bye, client!

и операция Ctrl+C (Unix) относятся к nc,

а сообщения

I'm telnet client
Bye-bye

относятся к go-telnet.

  1. Клиент завершает ввод
$ go-telnet localhost 4242
...Connected to localhost:4242
I
will be
back!
^D
...EOF
$ nc -l localhost 4242
I
will be
back!

Здесь сообщения

I
will be
back!

и операция Ctrl+D (Unix) относятся к go-telnet,

Сообщения

...Connected to localhost:4242
...Connection was closed by peer
...EOF

являются служебными. Они выводятся в STDERR и не тестируются test.sh, их формат на усмотрение автора.

Критерии оценки

  • Пайплайн зелёный - 4 балла
  • Добавлены юнит-тесты - до 2 баллов
  • Понятность и чистота кода - до 4 баллов

Зачёт от 7 баллов

Подсказки