/
Praxis/

Основы TCP - простой эхо-сервер

Контекст

Прежде чем строить систему координации команды, нужно понять основы сетевого программирования. TCP (Transmission Control Protocol) — это надежный протокол передачи данных, который гарантирует доставку сообщений в правильном порядке. Каждое веб-приложение, каждая игра, каждый чат — все они используют TCP для связи.

Представьте TCP как телефонную связь: сначала нужно установить соединение (набрать номер), затем можно обмениваться сообщениями (разговаривать), и в конце корректно завершить соединение (положить трубку). В отличие от UDP, который похож на отправку писем (не знаешь, дошло ли), TCP гарантирует, что каждое сообщение будет доставлено.

На этом этапе мы создадим простейший TCP сервер, который принимает одно соединение и отправляет обратно все, что получает — эхо-сервер. Это фундамент, на котором мы построим всю систему координации команды.

Ключевая концепция: TCP-сервер

создаёт точку входа для TCP-подключений на указанном порту. блокирует выполнение до получения нового соединения. Для построчного чтения данных из соединения используется .

listener, _ := net.Listen("tcp", ":8080") defer listener.Close() conn, _ := listener.Accept() scanner := bufio.NewScanner(conn) for scanner.Scan() { conn.Write([]byte(scanner.Text() + "\n")) }

💡 Gotcha: Accept() блокирует выполнение. Пока сервер ждёт нового клиента, он не может обрабатывать текущие соединения. Это мы исправим в следующих этапах с помощью горутин.

Используемые пакеты

ПакетНазначениеКлючевые функции
netСетевое программированиеListen, Accept
bufioБуферизованный ввод-выводNewScanner, Scan, Text

Цели этапа

Создать базовый TCP сервер с эхо-функциональностью.

Что необходимо сделать:

  • Функция:

    func StartEchoServer(port string) error

    Логика:

    1. Создать точку входа для TCP-подключений через net.Listen("tcp", port)
    2. Принять соединение через listener.Accept()
    3. Создать bufio.Scanner для построчного чтения
    4. В цикле читать сообщения и отправлять их обратно
    5. Закрывать ресурсы через defer

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

После запуска сервера:

# Запуск сервера $ go run main.go TCP Echo Server listening on :8080 Waiting for connection... # В другом терминале подключение клиента $ telnet localhost 8080 Connected to localhost. Hello, server! Hello, server! How are you? How are you?

Полезные материалы

  • net.Listen — документация пакета net
  • TCP/IP для начинающих — понимание протокола TCP
  • bufio.Scanner — построчное чтение
  • Сетевое программирование в Go — на русском

Критерии

не проверялось
  • Функция StartEchoServer(port string) error создана
  • Точка входа для TCP-подключений создаётся через net.Listen("tcp", port)
  • Соединение принимается через listener.Accept()
  • Сообщения читаются построчно через bufio.Scanner
  • Точка входа для TCP-подключений и соединение закрываются через defer
Войдите в аккаунт, чтобы начать проект
Запустите первую проверку