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

Тип net.TCPConn

Тип net.TCPConn представляет собой TCP-соединение в Go. Он реализует интерфейс net.Conn и предоставляет методы для чтения и записи данных, а также для управления соединением. Объект net.TCPConn возвращается функциями net.Dial, net.DialTCP и net.Accept при работе с TCP. Основные методы типа: Read для чтения данных из соединения, Write для записи данных, Close для закрытия соединения, LocalAddr и RemoteAddr для получения адресов, а также SetDeadline, SetReadDeadline и SetWriteDeadline для установки таймаутов.

Создание TCP-соединения

Для создания клиентского TCP-соединения используется функция net.Dial или net.DialTCP. В первом параметре указывается протокол "tcp", во втором - адрес в формате "host:port". Рассмотрим пример установки соединения с удаленным сервером:

package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "example.com:80") if err != nil { fmt.Println("Error connecting:", err) return } defer conn.Close() fmt.Println("Connected to example.com:80") }

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

"Connected to example.com:80"

Чтение данных из соединения

Для чтения данных из TCP-соединения используется метод Read. Он принимает срез байт и возвращает количество прочитанных байт и ошибку. Чтение происходит до тех пор, пока не будет достигнут конец данных или не произойдет ошибка. Рассмотрим пример чтения данных из соединения:

package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "example.com:80") if err != nil { fmt.Println("Error connecting:", err) return } defer conn.Close() // Send HTTP request conn.Write([]byte("GET / HTTP/1.0\r\n\r\n")) buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { fmt.Println("Error reading:", err) return } fmt.Printf("Read %d bytes: %s", n, string(buf[:n])) }

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

"Read 256 bytes: HTTP/1.0 200 OK ..."

Запись данных в соединение

Для записи данных в TCP-соединение используется метод Write. Он принимает срез байт и возвращает количество записанных байт и ошибку. Метод гарантирует, что все данные будут записаны или вернет ошибку. Рассмотрим пример отправки данных на сервер:

package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "example.com:80") if err != nil { fmt.Println("Error connecting:", err) return } defer conn.Close() message := []byte("GET / HTTP/1.0\r\n\r\n") n, err := conn.Write(message) if err != nil { fmt.Println("Error writing:", err) return } fmt.Printf("Written %d bytes", n) }

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

"Written 18 bytes"

Установка таймаутов

Тип net.TCPConn позволяет устанавливать таймауты на операции чтения и записи с помощью методов SetDeadline, SetReadDeadline и SetWriteDeadline. Это важно для предотвращения зависания при работе с сетью. Рассмотрим пример установки таймаута на чтение:

package main import ( "fmt" "net" "time" ) func main() { conn, err := net.Dial("tcp", "example.com:80") if err != nil { fmt.Println("Error connecting:", err) return } defer conn.Close() // Set read deadline to 5 seconds err = conn.SetReadDeadline(time.Now().Add(5 * time.Second)) if err != nil { fmt.Println("Error setting deadline:", err) return } buf := make([]byte, 1024) n, err := conn.Read(buf) if err != nil { fmt.Println("Read error:", err) return } fmt.Printf("Read %d bytes", n) }

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

"Read 0 bytes: i/o timeout"

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

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