แแแ, แแแแช
แแแแแแ
แกแขแแขแแแจแ แแแแฎแแแฃแแแ แแแแแชแแแแ แกแแแแแแ แแแแแชแแแแก แกแแคแฃแซแแแแแ, แแฎแแ แชแแแแแแก แแแแแแแแแแก
แกแแขแ แแแกแแแ แขแ แคแแแแก แแ แแขแแแแแ
แฃแแ แฃแแแแแงแแคแก แแแแแแฃแ แแแแจแแ แก แกแฎแแแแแกแฎแแ แฐแแกแขแแ แแแจแแแแฃแ แแแแแแแชแแแก แแ แแชแแกแแแก แจแแ แแก. แแแแแแแชแแแก แแแแแกแแแ แแกแแ, แแแแแแฃแ แ แแแแจแแ แ แฐแแแแก แแ แฎแก, แ แแแแแแช แแแ แแแแแ แแแแแจแแ แแแก แแ แแชแแกแแแก.
แแก แฎแแแแ แแแแแแแชแแแก แคแแแแก แจแแขแงแแแแแแแแแแก แคแ แแแแแแขแแแแ แแแงแแคแแ (แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ) แแ แแแแแแฃแ แแแแแแแก แกแแขแ แแแกแแแ แขแ แคแแแแก แกแแแแฃแ แแก แแแแแขแแแแ.
แกแแขแ แแแกแแแ แขแ แคแแแ แจแแแแแ แแแแแกแชแแแก แกแแแแแแขแก แแแแแแแแแแก แฅแกแแแแก แจแ แแจแ, แกแแแแช แกแแแแแแขแ แฉแแกแแฃแแแ แฅแกแแแแก แคแแแแก แแแแแขแจแ (แแแแแชแแแแแแ แแแ) แแ แแแแแแแแแ. แแแแฆแแแแก แแแแแจแ, แฅแกแแแแก แคแแแ แแแแแฆแแแก แกแแขแ แแแกแแแ แขแ แคแแแแก แกแแแแแแขแก แแแขแแแ แแแแแแ แแ แแแแแกแชแแแก แแแก แกแแขแ แแแกแแแ แขแ แคแแแแก. แจแแแแแแ, แกแแขแ แแแกแแแ แขแ แคแแแ แแแฃแจแแแแแก แแแฆแแแฃแ แกแแแแแแขแก แแกแ, แ แแ แแแกแ แแแแแชแแแแแ แฎแแแแแกแแฌแแแแแ แแแฎแแแก แแแแฆแแแ แแแแแชแฎแแแแกแแแแก.
แแแแแชแแแแ แกแแแแแแ แแแแแชแแแแก แแ แแแชแแแแแ
แแแแแชแแแแ แกแแแแแแ แแแแแชแแแ แกแ แฃแแแแ แฃแกแแคแ แแฎแ แแ แฎแแ
แฃแแแ แขแแแแกแ แจแแแแฎแแแแ. แแแแแแแแแก แแฎแแ แ แฃแแ แแแแ แแฆแแแก แแแแแชแแแแแก แแแแ แคแแแแแแ, แฅแแแแก แแแก แจแแแชแแแ แแแแแขแก แแ แแแแแแแแก แแ แฎแแ.
แกแแ แแแ แ
package main
import (
"log"
"net"
)
func main() {
// IP-ะฐะดัะตั ัะตัะฒะตัะฐ ะธ ะฟะพัั
serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
if err != nil {
log.Fatal(err)
}
// ัะพะทะดะฐะตะผ ัะพะบะตั ั ะฟะพััะพะผ
serverConn, err := net.ListenUDP("udp", serverAddr)
if err != nil {
log.Fatal(err)
}
// ะพัะปะพะถะตะฝะฝะพะต ะทะฐะบัััะธะต ัะพะตะดะธะฝะตะฝะธั
defer serverConn.Close()
// ัะพะทะดะฐะตะผ ะฑััะตั ะดะปั ะดะฐะฝะฝัั
buf := make([]byte, 1024)
// ะถะดะตะผ ัะพะตะดะธะฝะตะฝะธะต
for {
// ัะธัะฐะตะผ ะทะฐะฟัะพั
n, addr, err := serverConn.ReadFromUDP(buf)
// ะฟะตัะตะดะฐะตะผ ะดะฐะฝะฝัะต ะฒ ะะะ ะฅะะะ ััะพะฒะตะฝั: ะฒ ะฝะฐัะตะผ ัะปััะฐะต stdout
println(string(buf[0:n]), " form ", addr.IP.String())
if err != nil {
log.Fatal(err)
}
// ะพัะฒะตัะฐ ะฝะตั, ั.ะบ. ััะพ UDP + ะฝะฐะดะตะถะฝัะน ะบะฐะฝะฐะป
}
}
แแแแแแแแ
package main
import (
"fmt"
"log"
"net"
"time"
)
func main() {
// IP-ะฐะดัะตั ัะตัะฒะตัะฐ ะธ ะฟะพัั
serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
if err != nil {
log.Fatal(err)
}
// ะปะพะบะฐะปัะฝัะน IP-ะฐะดัะตั ะธ ะฟะพัั
localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
if err != nil {
log.Fatal(err)
}
// ัััะฐะฝะพะฒะบะฐ ัะพะตะดะธะฝะตะฝะธั
conn, err := net.DialUDP("udp", localAddr, serverAddr)
if err != nil {
log.Fatal(err)
}
// ะพัะปะพะถะตะฝะฝะพะต ะทะฐะบัััะธะต ัะพะตะดะธะฝะตะฝะธั
defer conn.Close()
for {
// ะฟะพะปััะตะฝะธะต ะดะฐะฝะฝัั
ะพั ะะะ ะฅะะะะ ััะพะฒะฝั
fmt.Print("ะะฒะตะดะธัะต ัััะพัะฝะพะต ะฟัะตะดะปะพะถะตะฝะธะต > ")
var msg string
_, err := fmt.Scanf("%s", &msg)
if err != nil {
log.Fatal(err)
}
// ะฟะตัะตะดะฐะตััั ะฟะพัะพะบ ะฑะฐะนั, ะฐ ะฝะต ัััะพะบะฐ
buf := []byte(msg)
// ะทะฐะฟะธัั (ะฟะตัะตะดะฐัะฐ) ะฒ ัะพะตะดะธะฝะตะฝะธะต
_, err = conn.Write(buf)
if err != nil {
log.Fatal(err)
}
// 1 ัะตะบัะฝะดะพัะบั
time.Sleep(time.Second * 1)
}
}
แแแแแชแแแแ แกแแแแแแ แแแแแชแแแ แแ แฎแแ แจแแกแแซแแ แจแแชแแแแแแแ
แจแแแแแแ แแแแแฏแ แแ แแก แแแแแ แแฃแแแ, แ แแ แงแแแแ แแแแแชแแแฃแแ แแแแแขแ แแแแฆแแแ แแ แแแแแแแแแแ แแแแ, แ แแแแแแแช แแกแแแ แแแแแแแแแก, แแแแ แแ แแแแจแ แแ แกแแแฃแแ แแแขแแแ แจแแแซแแแแ แแแแแแแแแก แแแแก แแแแ, แ แแ แแ แฎแ แแแแฏแแ แแแแแกแชแแแก แแแแแชแแแแแก แแแแแฎแแแฏแแแแ.
แแ แจแแแแฎแแแแแจแ แแแแแแงแแแแแ แจแแแแแแ แแแฅแแแแแแแแ:
- แจแแชแแแแแก แแแแแแแแแ;
- แฃแแฃแแแแจแแ แ;
- แฎแแแแฎแแแ แแแแแชแแแ.
แแแแแชแแแแ แแแแแชแแแแก แกแแแแ แแ แแขแแแแแแแก, แ แแแแแแกแแช แแฅแแ แแแแแชแแแแก แแ แแแแแฏแแ แแแแแแ แแแแก แแกแแแแกแ แแแฅแแแแแแแแ, แแฌแแแแแ Automatic Repeat ReQuest (ARQ) แแ แแขแแแแแแแ.
แแแ แแ แแแแกแ, แแแกแแแแแแแกแฌแแแแแแแแ แฅแแแแ แแแจแ แจแแชแแแแแแแก แจแแกแแซแแแแแแแ, แ แแแแกแแช แแแแฆแแแ แแฎแแ แ แแ แแแแฆแแแก แแแคแแ แแแชแแแก แแแแ แแแแแขแแก แแแแแชแแแแก แจแแแแแแแแก แจแแกแแฎแแ.
แแ แแ แแแแแแแก แแแแแฌแงแแแขแ, แ แแแแแแช แแกแแแ แแแแแแงแแแแแ TCP-แจแ, แแ แแก แแแแแชแแแแ แแแแแขแจแ แแฎแแแ แแแแแก แแแแแขแแแ, แ แแแแแแช แจแแแชแแแก แแแแแขแแก แ แแแแ แแแแแ แก.
แแแแแชแแแแ แกแแแแแแ แแแแแชแแแ แแ แแกแแแแ แแ แฎแแ, แ แแแแแแช แแฅแแแแแแแแ แแแ แแแแแขแแก แแแแแฎแแแฏแแแแก แแ แแแแแ แแแแก
แแแแแฎแแแฏแแแแกแแแ แแ แแแ, แกแแแฌแฃแฎแแ แแ, แฅแกแแแจแ แฎแแแแ แแแแแขแแแแก แแแแแ แแแ.
แแ แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ แกแแญแแ แแ แแแฅแแแแแแแแ:
- แแแแแขแแก แแแแแ แแแแก แคแแฅแขแแก แแแแแแแ;
- แแแแแ แแฃแแ แแแแแขแแแแก แฎแแแแฎแแแ แแแฌแแแแแ แแแแฆแแ แแฎแแ แแก.
แแแ แแ แแแแกแ, แแแแแขแแก แแแแแ แแแแก แแแ แแ, แแฃแชแแแแแแแแ แฅแแแแ แแก แแแแแ แแแแก แแ, แแฃ แแ แแคแแ แ แแแแแแ แแ, แแแกแ แแแฌแแแแแ แแแแจแแแแแแแแแ แแแแแแแแแแแ. แงแแแแ แจแแแแฎแแแแแจแ, แแแแแ แแแแแแแ: แแแแแขแ แฎแแแแฎแแ แแแแแแแแแ. แแ แแแก แแแกแแแแแขแ แแแแแแแ แแก แแแฅแแแแแแ แแงแแแแแก แฃแแฃแแแแแแ แขแแแแแ แก, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแกแแแฆแแ แแ แแแแแแแก แแแขแแ แแแแแก แแแกแแกแ แฃแแ. แแกแ แ แแ, แแแแแขแจแ
// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
defaultTCPKeepAlive = 15 * time.Second
)
แแแแแแแแแก แแฎแแ แแ แฃแแแ แแแแฌแงแแก แขแแแแแ แ แงแแแแ แฏแแ แแ แแแแแขแแก แแแแแชแแแแกแแก (แแแ แแแแแ แแ แแแแ แแ), แแแฃแแแแแแแแก แขแแแแแ แแก แจแแคแแ แฎแแแแแก แแ แจแแแฉแแ แแก แแแ.
แแกแ แ แแ, แฉแแแ แแแแแชแแแแ แกแแแแแแ แแแแแชแแแแ แแแแแชแแแแก แแ แแขแแแแแแแแก แซแแ แแแแ แชแแแแแแก:
- แกแแแแแขแ แแแ แฏแแแแแ;
- แแแแแขแแแแก แแแแแแแแแแ แฃแแ แแแแ แแแ;
- แขแแแแแ แแแ;
- แแแแแแแแ แแ แฃแแ แงแแคแแแ แฅแแแแ แแแ.
แแแแ แแ แแก แงแแแแแคแแ แ แแ แแ แแก!
แกแแแแ แแแแแชแแแแ แแแแแชแแแแก แแ แแขแแแแแ แแแแกแแแแแแ
แแ แแแ แแแแขแจแ, แ แแแแแแช แฃแแแ แแแแแแฎแแแแ, แแแฌแแแแแแก แกแแแแแแ แแ แแขแแแแแ แซแแแแแ แแ แแแคแแฅแขแฃแ แแ. แแก แแฌแงแแแก แกแแแแแฃแแแแแชแแ แแ แฎแแก แแแแ แแแฌแแแแแฃแแ แแแแแชแแแแก โแจแแแแแแแแกโ, แ แแแแกแแช RTT แแแ แแแแ. แแแกแ แแคแแฅแขแฃแ แแแแก แแแกแแแ แแแแแ แแ แกแแแแแฃแแแแแชแแ แแ แฎแแก แกแแแซแแแแ แแก แฃแแแ แแแแแกแแงแแแแแแแ แแแแแแงแแแแแ แแแแกแแแแแ.
แแแแกแแแแแแก แแแแแงแแแแแ แแฌแแแแก:
- แแแแแแแ แแแแก แ แแชแฎแแแแแก แแแแแแแแแแก แแแแ แแ, แแแแแแแแ แงแแแแ แแแแแแแแแแ แแแแแขแ (แแแ แแ แฎแแแแฎแแแ แแแแแชแแแแกแ) แฃแแแ แแงแแก แชแแแกแแฎแแ แแแแแขแแคแแชแแ แแแฃแแ;
- แแแแแแชแแ แแ แแแแฆแแ แแฎแแ แแแแแ แแฃแคแแ แแแแก แแแแ แแแก แแฃแชแแแแแแแแ.
แแแแแแแแแแ แแแแก แ แแชแฎแแแก แแแแแแแแแ แแ แแฃแคแแ แแก แแแแแก แแแแฎแแแแแแ แแแแแแแแแแฃแแแ แแ แฅแแแแแแแแแ, แ แแแแแแกแแช แแ แแขแแแแแ แแฎแแ แชแแแแแแก แแแแแขแแก แแแ แฃแคแชแแแก, แแแแแ แแแแกแ แแ แแแแแแแแแแแก แกแแแแกแฃแฎแแ. แแแแกแแแแแแก แจแแแแฎแแแแแจแ, แจแแชแแแแแแแก แแแแแกแฌแแ แแแแก แแ แ แแแ แแ แกแแแแแก:
- N แแแแแขแแก แฃแแแ แแแแ แฃแแแแ;
- แจแแ แฉแแแแแ แแแแแแ แแแ.
N แแแแแขแแก แฃแแแ แแแแ แฃแแแแ - แแแชแฃแ แแแแก แคแแแฏแ แแก แแ แแขแแแแแ
แแแแแแแแแแ แฃแแแ แแฎแแ แ แแแฃแญแแ แแก แกแแแ แกแแฎแแก แแแแแแแแก:
- แแแ แแแแ แฃแคแ แ แแแฆแแแ แแแแแก แแ แแขแแแแแแ. แ แแแแกแแช แแแแแชแแแแ แแแแแแแแแก แคแฃแแฅแชแแแก แฃแฌแแแแแแ "แแแแแแแ", แแแแแแแแแก แแฎแแ แ แฏแแ แแแแฌแแแแก แคแแแฏแ แแก แจแแแกแแแแก แฎแแ แแกแฎแก (แแแฃ N แแแแแแแแแแ แจแแขแงแแแแแแแแแแก แแ แกแแแแแ, แ แแแแแแแช แแแแแแแ แฅแแแแ แแแแก แแแฆแแแแก). แแฃ แคแแแฏแแ แ แชแแ แแแแแ, แแฎแแแ แแแแแขแ แแแแแ แแ แแแฃแแ แแ แแแแแชแแแฃแแแ แแ แชแแแแแ แแแแจแแแแแแแแแ แแแแแฎแแแแแ. แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแแแแแแแแก แแฎแแ แ แแแ แฃแแแแก แแแแแชแแแแแก แแแแ แคแแแแจแ แแ แแก แแ แแก แแแแแแชแแขแฃแ แ แแแแแแแแ, แ แแ แคแแแฏแแ แ แกแแแกแแ. แ แแแแ แช แฌแแกแ, แแแแ แคแแแ แจแแแชแแแแ แแแแแชแแแแ แแแแแชแแแแก แแแ แแแแฃแแ แแ แแแก แจแแแแแ. แ แแแแฃแ แแแแแแแชแแแจแ, แแแแแแแแแแแ แกแแแแ แแฃแแแ แแ แแฃแคแแ แฃแแ แแฅแแแแ แแแแแชแแแแแแก (แแแชแแแแ แแแฃแงแแแแแแแแ แแแแแแแแแก แแแชแแแแ) แแ แกแแแฅแ แแแแแแชแแแก แแแฅแแแแแแก (แ แแแแ แแชแแ แกแแแแคแแ แ แแ แแ แแจแ), แ แแแแแแช แแแแ แคแแแแก แกแแจแฃแแแแแแก แแแกแชแแแก แแแแแแซแแฎแแก แแแแแแแแแก แคแฃแแฅแชแแ แแฎแแแแ แแแจแแ, แ แแแแกแแช แคแแแฏแแ แ แชแแ แแแแแ. .
- แแแแแกแขแฃแ แแแแก แแแฆแแแ. แแ แแขแแแแแจแ, N แแแแแแแ แแแแแ แแแแ แแก แแฅแแแ แแแแแขแแกแแแแก, แแแแชแแแ แแแแแแ แแฆแแแ แแแ, แ แแแแแแช แแแฃแแแแแแก, แ แแ N-แแก แฌแแแ แแแแ แแก แแฅแแแ แงแแแแ แแแแแขแ แฌแแ แแแขแแแแ แแฅแแ แแแฆแแแฃแแ.
- แแแแแแแก แแแขแแ แแแแ แแแแแฌแฃแ แ. แแแแแขแแแแก แแ แฅแแแแ แแแแก แแแแแ แแแแกแ แแ แแแแแแแแแแแก แคแแฅแขแแแแก แแแกแแแแแแแ, แแ แแขแแแแแ แแงแแแแแก แขแแแแแ แก. แแฃ แแแแแก แแแแฌแฃแ แแแก แแแขแแ แแแแ แแแแแฌแฃแ แแแ, แแแแแแแแแ แแฎแแ แ แฎแแแแฎแแ แแแแแแแแก แงแแแแ แแแแแแแแแ แแแฃแแแกแขแฃแ แแแแ แแแแแขแก.
แจแแ แฉแแแแแ แแแแแแ แแแ
แ แแแแกแแช แคแแแฏแ แแก แแแแ แแ แแแแขแแ แฃแแแ แแแแแแ-แแแแ แชแแแแแแก แแแงแแแแแแแก แแ แแแฃแฅแขแ แแแแแ, แแแแ แ แแแแแแแแแ แแแแแขแแแ แจแแแซแแแแ แแงแแก แแแแกแแแแแจแ. แแกแแ แจแแแแฎแแแแแจแ, แแ แแ แแแแแขแแก แจแแชแแแแแ แจแแแซแแแแ แแแแแแฌแแแแก แแแแ แ แแแแแแแแแก แแแแแขแแแแก แฎแแแแฎแแแ แแแแแชแแแ, แ แแแแแแ แฃแแแขแแกแแแ แแ แแงแ แกแแญแแ แ.
แแแแแแแแ
แแแแ แฃแแแแ
แกแแ แแแ แ
package main
import (
"bufio"
"fmt"
"log"
"net"
"strings"
)
func main() {
// ัะพะทะดะฐะตะผ ัะพะบะตั ั ะฟะพััะพะผ
ln, err := net.Listen("tcp", ":8081")
if err != nil {
log.Fatalln(err)
}
// ะพะถะธะดะฐะฝะธะต ะฒัะทะพะฒะฐ
conn, _ := ln.Accept()
for {
// ััะธััะฒะฐะฝะธะต ะดะฐะฝะฝัั
msg, err := bufio.NewReader(conn).ReadString('n')
if err != nil {
log.Fatalln(err)
}
// ะฒัะฒะพะด ัะพะพะฑัะตะฝะธั ะฒ stdout
fmt.Print("Message Received:", string(msg))
// ะฟะตัะตะฒะพะด ัััะพะบะธ ะฒ ะฒะตัั
ะฝะธะน ัะตะณะธััั
newMsg := strings.ToUpper(msg)
// ะพัะฟัะฐะฒะบะฐ ะดะฐะฝะฝัั
conn.Write([]byte(newMsg + "n"))
}
}
แแแแแแแแ
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
)
func main() {
// ัััะฐะฝะพะฒะบะฐ ัะพะตะดะธะฝะตะฝะธั
conn, err := net.Dial("tcp", "127.0.0.1:8081")
if err != nil {
log.Fatalln(err)
}
for {
// ััะธััะฒะฐะฝะธะต ะดะฐะฝะฝัั
ั stdin
reader := bufio.NewReader(os.Stdin)
fmt.Print("Text to send: ")
// ะฟะพัััะพัะฝะพ
text, err := reader.ReadString('n')
if err != nil {
log.Fatalln(err)
}
// ะพัะฟัะฐะฒะบะฐ
fmt.Fprintf(conn, text+"n")
// ะฟัะธะตะผ
msg, err := bufio.NewReader(conn).ReadString('n')
if err != nil {
log.Fatalln(err)
}
// ะฒัะฒะพะด ะฟะพะปััะตะฝะฝะพะณะพ ะพัะฒะตัะฐ
fmt.Print("Msg from Server: " + msg)
}
}
แแแแแงแแแแแก
แแแฅแแแแแแแแ แแแแแชแแแแ แกแแแแแแ แแแแแชแแแแกแ แแ แแแแแงแแแแแแก แฃแแ แฃแแแแแกแแงแแคแแ
แแแฅแแแแแแ
แแแแชแฎแแแแแ, แแแแแแขแแ แ
แจแแแแแฌแแแ แฏแแแ
แแแแแแงแแแแแ แแแแแชแแแฃแ แแแแแขแจแ แแแขแแก แจแแชแแแแแแแก แแแกแแแแแแแ
แขแแแแแ แ
แแแแแแก แแ แแแก แแแแฌแฃแ แแแก แแแขแแ แแแแก แแ แแแฃแแแแแแก, แ แแแแก แแแแแแ แแก. แแก แฃแแแแแกแแแแแ แแแจแแแแก, แ แแ แแแแ แแแแแแแแแ แแแแแขแ แแ แแแกแ แแแฆแแแ แแแแ แแแแ แแแแแชแแแแก แแ แแก. แแฃ แแแแแขแ แแแแฌแแแแแ แแแแแแแแแแแ, แแแแ แแ แแ แแแแแแ แแแแ (แแ แแแก แแแแแแ แแแ แ แแแกแแแ), แแ แฅแแแแแ แ แแแแแแ แแ, แฎแแแแฎแแแ แแแแแชแแแ แแฌแแแแก แแแแแขแก แแฃแแแแแแขแแแแ แแแแฆแแ แแฎแแ แแก.
แฒกแแ แแฃแแ แแแแแ แ
แแแแแแงแแแแแ แแแแแแแแแแแแ แแแแฆแแแแแแ แแแแแชแแแฃแแ แแแแแชแแแแ แแแแแขแแแแก แแแแแแแแแแ แฃแแ แแฃแแแ แแชแแแกแแแแก. แแแฆแแแฃแแ แแแแแขแแแแก แ แแแแ แแแแ แแแจแ แแ แกแแแฃแแ แฎแแ แแแแแแ แแแแฆแแแก แกแแจแฃแแแแแแก แแซแแแแก แแฆแแแแฉแแแแก แแแแแขแแก แแแแแ แแแ. แแแแแ แแแแแขแแก แแแแแแแแแแ แฃแแ แแแแ แแแ แแแจแแแแก, แ แแ แแแแแขแแแ แแ แแแแแแแแก แแฃแแแแแแขแแแแ
แแแแแกแขแฃแ แแแ
แแแแแ แแ แแแฃแแแ แแแแฆแแแแก แแแแ แแ แแแฃแแแแแแก แแแแแแแแแก แแแแแก, แ แแ แจแแกแแแแแแกแ แแแแแขแ แแ แแแแแขแแแแก แฏแแฃแคแ แฌแแ แแแขแแแแ แแฅแแ แแแฆแแแฃแแ. แ แแแแ แช แฌแแกแ, แแแแแกแขแฃแ แแแ แจแแแชแแแก แฌแแ แแแขแแแแ แแแฆแแแฃแแ แแแแแขแแแแก แแแแแแแแแแ แฃแ แแแแ แแแก. แแ แแขแแแแแแแแ แแแแแแแแแแ แ, แแแแแกแฎแแแแแแแ แแแแแแแแฃแแแฃแ แแ แฏแแฃแคแฃแ แแแแแกแขแฃแ แแแแแก
แฃแแ แงแแคแแแ แแแแแกแขแฃแ แแแ
แแแแแแงแแแแแ แแแแฆแแแแก แแแแ , แ แแแ แแชแแแแแก แแแแแแแแแก, แ แแ แแแแแขแ แแ แแกแฌแแ แแ แแฅแแ แแแฆแแแฃแแ. แฃแแ แงแแคแแแ แแฆแแแ แแแ แฉแแแฃแแแแ แแ แแแแชแแแก แแ แแแแแขแแก แ แแแแ แแแแแ แก, แ แแแแแแช แแ แแฅแแ แแแฆแแแฃแแ แกแฌแแ แแ
แคแแแฏแแ แ, แแแแแแแแ แแแแชแแ
แจแแแฆแฃแแแ แ แแแแแ แ แแชแฎแแแแแก แแแแแแแแแ, แ แแแแแแช แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแแขแแแแก แแแแแกแแชแแแแ. Multicast แแ handshake แจแแแซแแแแ แแแแจแแแแแแแแแ แแแแแ แแแก แแ แแขแแแแแแก แแแแขแแ แฃแแแ แแแแแแ แแฆแแแ แแแแก แแแแแแแแแแ แจแแแแ แแแแ. แ แแแแ แช แแแแแแแฎแแแ, แคแแแฏแ แแก แแแแ แจแแแซแแแแ แแแแแแแแแแแก แแแแฆแแแ แแแกแแกแ แฃแแแก แแแฆแแแแกแ แแ แแฃแคแแ แฃแแ แจแแกแแซแแแแแแแแแแก, แแกแแแ แฅแกแแแแก แแแขแแแ แแแแก แแแแแก แแแฎแแแแแ.
Go-แก แฅแกแแแจแ แแแแแงแแแแแแก แกแฎแแ แแแแแแแแแแ
แฌแงแแ แ: www.habr.com