Практика на сокеты TCP в Go
Дан адрес:
addr := "127.0.0.1:9090"
Напишите клиент: откройте TCP на
addr, отправьте "hi",
прочитайте ответ и выведите его.
Дан адрес сервера:
addr := "127.0.0.1:9090"
Поднимите слушатель на addr,
примите одно соединение, прочитайте
строку в буфер и напечатайте ее.
Дано сообщение:
msg := "task"
Сервер на "127.0.0.1:9090"
должен вернуть "echo: task",
если клиент отправил msg.
Соберите пару клиент-сервер в одном
файле: сервер в горутине, клиент
в main.
Дан цикл принятия:
for {
conn, err := ln.Accept()
if err != nil {
log.Fatal(err)
}
go handleConn(conn)
}
Допишите handleConn: закрытие
соединения, чтение в 256 байт,
ответ "ok" без префикса.
Дан следующий клиентский фрагмент:
conn, err := net.Dial("tcp", "127.0.0.1:9090")
if err != nil {
log.Fatal(err)
}
conn.Write([]byte("x"))
Скажите, что нужно добавить, чтобы
порт освободился при выходе из
main даже после ошибки чтения.
Даны два вызова подряд на одном соединении после чтения запроса:
conn.Write([]byte("part1"))
conn.Write([]byte("part2"))
Скажите, сколько раз клиенту нужно вызывать чтение, чтобы забрать обе части, если сервер не закрывал канал между записями.