Socket
Book a DemoInstallSign in
Socket

github.com/fedoseevalex/otusgolanghomework/hw11_telnet_client

Package Overview
Dependencies
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/fedoseevalex/otusgolanghomework/hw11_telnet_client

Source
Go Modules
Version
v0.0.0-20210304173004-af42d56d906a
Version published
Created
Source

Домашнее задание №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 программа должна завершать свою работу.
  • Если сокет закрылся со стороны сервера, то при следующей попытке отправить сообщение программа должна завершаться (допускается завершать программу после "неудачной" отправки нескольких сообщений).
  • При подключении к несуществующему серверу, программа должна завершаться с ошибкой соединения/таймаута.

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

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

  • Сервер обрывает соединение
$ 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.

  • Клиент завершает ввод
$ 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 баллов

Подсказки

  • flag.StringVar
  • net.JoinHostPort, net.DialTimeout
  • bufio / io
  • https://stackoverflow.com/questions/51317968/write-on-a-closed-net-conn-but-returned-nil-error

FAQs

Package last updated on 04 Mar 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts