РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1093 of 1593 menu

Интерфейс net.Listener

Интерфейс net.Listener представляет собой объект, который прослушивает сетевые соединения на указанном адресе. Он предоставляет методы для принятия входящих подключений и закрытия слушателя. Основной способ создания слушателя - использование функции net.Listen, которая возвращает реализацию этого интерфейса.

Интерфейс net.Listener содержит три метода: Accept - принимает входящее соединение и возвращает интерфейс net.Conn для обмена данными, Close - закрывает слушатель и освобождает ресурсы, Addr - возвращает сетевой адрес слушателя в виде интерфейса net.Addr.

Синтаксис

type Listener interface { Accept() (Conn, error) Close() error Addr() Addr }

Пример

Создадим простой TCP-сервер, который прослушивает порт 8080 и отвечает приветствием на каждое подключение:

package main import ( "fmt" "net" ) func main() { // Create a TCP listener on port 8080 listener, err := net.Listen("tcp", "localhost:8080") if err != nil { fmt.Println("Error creating listener:", err) return } defer listener.Close() fmt.Println("Server is listening on localhost:8080") for { // Accept incoming connections conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting connection:", err) continue } // Handle connection in a separate goroutine go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() response := "Hello, client!\n" _, err := conn.Write([]byte(response)) if err != nil { fmt.Println("Error writing to connection:", err) return } fmt.Println("Connection handled successfully") }

Результат выполнения кода:

"Server is listening on localhost:8080"

Пример

Используем метод Addr для получения сетевого адреса созданного слушателя:

package main import ( "fmt" "net" ) func main() { listener, err := net.Listen("tcp", ":0") if err != nil { fmt.Println("Error creating listener:", err) return } defer listener.Close() // Get the listener's address addr := listener.Addr() fmt.Println("Listener address:", addr.String()) fmt.Println("Network type:", addr.Network()) }

Результат выполнения кода:

"Listener address: [::]:38673" "Network type: tcp"

Пример

Закроем слушатель до завершения программы с помощью метода Close. Это освободит порт и остановит прием подключений:

package main import ( "fmt" "net" "time" ) func main() { listener, err := net.Listen("tcp", "localhost:8080") if err != nil { fmt.Println("Error creating listener:", err) return } fmt.Println("Listener created successfully") // Close the listener after 2 seconds time.Sleep(2 * time.Second) err = listener.Close() if err != nil { fmt.Println("Error closing listener:", err) return } fmt.Println("Listener closed successfully") // Try to accept after close - will fail _, err = listener.Accept() if err != nil { fmt.Println("Accept failed:", err) } }

Результат выполнения кода:

"Listener created successfully" "Listener closed successfully" "Accept failed: use of closed network connection"

Смотрите также

  • функцию net.Listen,
    которая создает сетевой слушатель
  • интерфейс net.Conn,
    который представляет сетевое соединение
  • функцию net.Dial,
    которая устанавливает соединение с удаленным хостом
  • функцию net.DialTimeout,
    которая устанавливает соединение с таймаутом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить