Пакет net
предоставляет интерфейс для сетевого I/O, включая TCP/IP, UDP, DNS, и Unix-сокетов.
Хотя пакет предоставляет доступ к низкоуровневым сетевым примитивам большинству клиентов потребуется только базовый интерфейс, обеспечиваемый функциями Dial, Listen и Accept,
а также соответствующими интерфейсами Conn и Listener.
Пакет crypto/tls
использует те же интерфейсы и аналогичные функции Dial и Listen.
Dial
Для отправки запросов к ресурсам в сети применяется функция net.Dial
func Dial(network, address string) (Conn, error)
На вход функция принимает 2 аргумента - тип протокола и адрес ресурса. Есть следующие типы протоколов:
tcp,tcp4,tcp6- протоколTCP. По умеолчанию используетсяtcp4, а цифра в конце указывает, какой тип адресов будет использоваться -IPv4илиIPv6.upd,upd4,upd6- протоколUDP. По умолчанию используетсяudp4.ip,ip4,ip6- протоколIP. По умолчанию -ip4.unix,unixgram,unixpacket- сокетыUnix.
Для сетей TCP и UDP адрес имеет вид host:port.
Хост должен быть IP-адресом или именем хоста, которое может быть преобразовано в IP-адреса.
Порт может быть номером порта или именем службы.
Если хост представляет собой IPv6-адрес, он должен быть заключен в квадратные скобки, например, [2001:db8::1]:80 или [fe80::1%zone]:80.
Зона определяет область IPv6-адреса, как определено в RFC 4007
.
Функции JoinHostPort и SplitHostPort манипулируют парой хоста и порта в этой форме.
При использовании TCP, когда хост разрешается в несколько IP-адресов, Dial будет пробовать каждый IP-адрес по порядку, пока один из них не будет успешным.
Пример:
conn, err := net.Dial("tcp", "mixanemca.ru:80")
if err != nil {
// handle error
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
status, err := bufio.NewReader(conn).ReadString('\n')
// ...
Listen
Функция Listen начинает слушать запросы по локальному сетевому адресу.
func Listen(network, address string) (Listener, error)
Для сетей TCP, если хост в параметре адреса пуст или буквально не указан IP-адрес, Listen прослушивает все доступные unicast и anycast IP-адреса локальной системы.
Адрес может использовать имя хоста, но это не рекомендуется, поскольку будет создан Listener не более чем для одного из IP-адресов хоста.
Если порт в параметре адреса пуст или равен 0, как в 127.0.0.1: или [::1]:0, номер порта выбирается автоматически.
Метод Listener.Addr() можно использовать для обнаружения выбранного порта.
Listen использует context.Background внутри; чтобы указать контекст, используйте ListenConfig.Listen.
Пример:
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// handle error
}
for {
conn, err := ln.Accept()
if err != nil {
// handle error
}
go handleConnection(conn)
}