рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд░рдирд╛ рд╣реИ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рддред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд

рд▓реЗрдЦ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ Go, рдпреВрдбреАрдкреА рдФрд░ рдЯреАрд╕реАрдкреА рд╕рд╣рд┐рддред рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдордп, ╨┤╨▓╨░, рддреАрди ╨╕ ╨║╨╜╨╕╨│╨╕ "╨Ъ╨╛╨╝╨┐╤М╤О╤В╨╡╤А╨╜╤Л╨╡ ╤Б╨╡╤В╨╕. ╨Э╨╕╤Б╤Е╨╛╨┤╤П╤Й╨╕╨╣ ╨┐╨╛╨┤╤Е╨╛╨┤", ╨░ ╤В╨╛ ╨▓╤Б╨╡ ╨╛╨▒╤Б╤Г╨╢╨┤╨░╤О╤В ╤В╨╛╨╗╤М╨║╨╛ ╨в╨░╨╜╨╜╨╡╨╜╨▒╨░╤Г╨╝╨░ ╨╕ ╨Ю╨╗╨╕╤Д╨╡╤А╨╛╨▓.

рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рд╡рд┐рднрд┐рдиреНрди рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓ рд░рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдмрдВрдз рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдЪреИрдирд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реАрдзреЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдВрдб рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ (рд╕рд┐рд╡рд╛рдп - рдбреАрдкреАрдЖрдИ). рдкреНрд░реЗрд╖рдХ рдкрдХреНрд╖ рдкрд░, рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдкрд░рдд, рднреЗрдЬрдиреЗ рд╡рд╛рд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдпрд░ рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рдкреИрдХреЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕реЗ рд╕реЗрдЧрдореЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

╨Ф╨░╨╗╨╡╨╡ ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╤Л╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨┐╨╡╤А╨╡╨┤╨░╨╡╤В ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤Б╨╡╤В╨╡╨▓╨╛╨╝╤Г ╤Г╤А╨╛╨▓╨╜╤О ╨╛╤В╨┐╤А╨░╨▓╨╕╤В╨╡╨╗╤П, ╨│╨┤╨╡ ╤Б╨╡╨│╨╝╨╡╨╜╤В ╨╕╨╜╨║╨░╨┐╤Б╤Г╨╗╨╕╤А╤Г╨╡╤В╤Б╤П ╨▓ ╨┐╨░╨║╨╡╤В ╤Б╨╡╤В╨╡╨▓╨╛╨│╨╛ ╤Г╤А╨╛╨▓╨╜╤П (╨┤╨╡╨╣╤В╨░╨│╤А╨░╨╝╨╝╤Г) ╨╕ ╨╛╤В╤Б╤Л╨╗╨░╨╡╤В╤Б╤П. ╨Э╨░ ╨┐╤А╨╕╨╜╨╕╨╝╨░╤О╤Й╨╡╨╣ ╤Б╤В╨╛╤А╨╛╨╜╨╡ ╤Б╨╡╤В╨╡╨▓╨╛╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨╕╨╖╨▓╨╗╨╡╨║╨░╨╡╤В ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╨╛╨│╨╛ ╤Г╤А╨╛╨▓╨╜╤П ╨╕╨╖ ╨┤╨╡╨╣╤В╨░╨│╤А╨░╨╝╨╝╤Л ╨╕ ╨┐╨╡╤А╨╡╨┤╨░╨╡╤В ╨╡╨│╨╛ ╨▓╨▓╨╡╤А╤Е ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╨╛╨╝╤Г ╤Г╤А╨╛╨▓╨╜╤О. ╨Ф╨░╨╗╨╡╨╡ ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╤Л╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨╛╨▒╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╜╤Л╨╣ ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤В╨░╨║╨╕╨╝ ╨╛╨▒╤А╨░╨╖╨╛╨╝, ╤З╤В╨╛╨▒╤Л ╨╡╨│╨╛ ╨┤╨░╨╜╨╜╤Л╨╡ ╤Б╤В╨░╨╗╨╕ ╨┤╨╛╤Б╤В╤Г╨┐╨╜╤Л ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤О-╨┐╨╛╨╗╤Г╤З╨░╤В╨╡╨╗╤О.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреИрдирд▓ рдкрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛. рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдкрдХреНрд╖ рдХреЗрд╡рд▓ рдКрдкрд░реА рдкрд░рдд рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдпреБрдХреНрдд рдПрдХ рдкреИрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЪреИрдирд▓ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред

рд╕реЗрд╡рдХ

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)
    }
}

рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдирд▓ рдкрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди

рдЕрдЧрд▓рд╛ рдХрджрдо рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░реЗрд╖рд┐рдд рдкреИрдХреЗрдЯ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рднреЗрдЬреЗ рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рдмрд┐рдЯреНрд╕ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рджреВрд╖рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪреИрдирд▓ рдХрднреА-рдХрднреА рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдЧрд▓рддреА рдкрд╣рдЪрд╛рдирдирд╛;
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛;
  • рдкреБрди:рд╕рдВрдЪрд░рдгред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрд┐рдирдореЗрдВ рдХрдИ рдмрд╛рд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░рд┐рдкреАрдЯ рд░реАрдХреНрд╡реЗрд╕реНрдЯ (ARQ) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд░рд╕реАрджреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬрдм рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдХреЛ рдЕрдВрддрд┐рдо рдкреИрдХреЗрдЯ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрд╕реАрдкреА рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреИрдХреЗрдЯ рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкреИрдХреЗрдЯ рд╡рд┐рд░реВрдкрдг рдФрд░ рд╣рд╛рдирд┐ рдХреЗ рдЕрдзреАрди рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЪреИрдирд▓ рдкрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди

рд╡рд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рднреА рд╣реЛрддреА рд╣реИред
рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рдХреЗ рддрдереНрдп рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг;
  • рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдХреЛ рдЦреЛрдП рд╣реБрдП рдкреИрдХреЗрдЯреЛрдВ рдХреА рдкреБрдирдГ рдбрд┐рд▓реАрд╡рд░реАред

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдкреИрдХреЗрдЬ рдХреЗ рдЦреЛ рдЬрд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╕реАрдж рдХреЗ рдЦреЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╛, рдпрджрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХрд╛рдлреА рджреЗрд░реА рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреИрдХреЗрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдВрддреНрд░ рдПрдХ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдВрдд рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддреЛ рдкреИрдХреЗрдЬ рдореЗрдВ рдЬрд╛рд▓ TCPKeepAlive рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 15 рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рд╣реИ:

// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
    defaultTCPKeepAlive = 15 * time.Second
)

рд╣рд░ рдмрд╛рд░ рдкреИрдХреЗрдЯ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрдиреЗ рдкрд░ (рдкрд╣рд▓реА рдФрд░ рджреВрд╕рд░реА рдмрд╛рд░ рджреЛрдиреЛрдВ) рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдкрдХреНрд╖ рдХреЛ рдПрдХ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЯрд╛рдЗрдорд░ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░реБрдХрд╛рд╡рдЯреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд░реЛрдХрдирд╛ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдкреНрд░рдореБрдЦ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдП рд╣реИрдВ:

  • рдЪреЗрдХрд╕рдо;
  • рдкреИрдХреЗрдЬреЛрдВ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛;
  • рдЯрд╛рдЗрдорд░;
  • рд╕рдХрд╛рд░рд╛рддреНрдордХ рдФрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рд╛рдкреНрддрд┐рдпрд╛рдБ.

рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ!

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рдЬрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд┐рд▓реАрд╡рд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рдЕрдХреНрд╖рдо рд╣реИред рдЖрд░рдЯреАрдЯреА рдмрдврд╝рдиреЗ рдкрд░ рдпрд╣ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреНрд░рд╕рд╛рд░рдг рдХреЛ "рдзреАрдорд╛" рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреА рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдХреНрд╖рдорддрд╛ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:

  • рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдмрдврд╝рд╛рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рднреЗрдЬреЗ рдЧрдП рдкреИрдХреЗрдЯ (рдкреБрди: рдкреНрд░рд╕рд╛рд░рдг рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
  • рд╕рдВрдЪрд╛рд░рдг рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрдХреНрд╖реЛрдВ рдкрд░ рдмрдлрд╝рд░реНрд╕ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ред

рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдФрд░ рдмрдлрд░ рдЖрдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдкреИрдХреЗрдЯ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░, рд╣рд╛рдирд┐ рдФрд░ рджреЗрд░реА рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВред рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:

  • рдПрди рдкреИрдХреЗрдЯ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВ;
  • рдЪрдпрдирд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐.

рдПрди рдкреИрдХреЗрдЯ рд╡рд╛рдкрд╕ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ - рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкреНрд░реЗрд╖рдХ рдХреЛ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд░реЗрдВред рдЬрдм рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рдКрдкрд░ рд╕реЗ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдкрдХреНрд╖ рдкрд╣рд▓реЗ рд╡рд┐рдВрдбреЛ рдХреЗ рднрд░рдиреЗ рдХреА рдбрд┐рдЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдкреНрд░рд╛рдкреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдПрди рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐)ред рдпрджрд┐ рд╡рд┐рдВрдбреЛ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЯ рдЙрддреНрдкрдиреНрди рдФрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЪрд░ рдорд╛рди рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдкрдХреНрд╖ рдКрдкрд░реА рдкрд░рдд рдкрд░ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛ рднрд░реА рд╣реБрдИ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдКрдкрд░реА рдкрд░рдд рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧреАред рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдкреНрд░реЗрд╖рдХ рд╕рдВрднрд╡рддрдГ рдпрд╛ рддреЛ рдбреЗрдЯрд╛ рдХреЛ рдмрдлрд░ рдХрд░реЗрдЧрд╛ (рдЗрд╕реЗ рддреБрд░рдВрдд рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп) рдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рддрдВрддреНрд░ рд╣реЛрдЧрд╛ (рдЬреИрд╕реЗ рдХрд┐ рд╕реЗрдорд╛рдлреЛрд░ рдпрд╛ рдзреНрд╡рдЬ) рдЬреЛ рдКрдкрд░реА рдкрд░рдд рдХреЛ рд╕реЗрдВрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬрдм рд╡рд┐рдВрдбреЛ рдЦрд╛рд▓реА рд╣реЛ .
  • рдкреБрд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ, рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдПрди рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд╡рддреА рдЬрд╛рд░реА рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рджрд░реНрд╢рд╛рддреА рд╣реИ рдХрд┐ рдПрди рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рд╕рднреА рдкреИрдХреЗрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП рдереЗред
  • рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдВрддрд░рд╛рд▓ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ. рдкреИрдХреЗрдЯ рдФрд░ рдкреНрд░рд╛рдкреНрддрд┐рдпреЛрдВ рдХреЗ рдиреБрдХрд╕рд╛рди рдФрд░ рджреЗрд░реА рдХреЗ рддрдереНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдВрддрд░рд╛рд▓ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдкрдХреНрд╖ рд╕рднреА рднреЗрдЬреЗ рдЧрдП рдЕрд╕реНрд╡реАрдХреГрдд рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬ рджреЗрддрд╛ рд╣реИред

рдЪрдпрдирд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐

рдЬрдм рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рдереНрд░реВрдкреБрдЯ-рдкреНрд░рд╕рд╛рд░ рд╡рд┐рд▓рдВрдм рдЙрддреНрдкрд╛рдж рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрдХреЗрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдПрдХрд▓ рдкреИрдХреЗрдЯ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрдХреЗрдЯ рдкреБрдирдГ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред

рдЙрджрд╛рд╣рд░рдг

рд╢реАрд░реНрд╖ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрднреНрдпрд╛рд╕реЛрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЯреАрд╕реАрдкреА. рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЬрд╛рдирддрд╛ рд╣реИ - рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ.

рд╕реЗрд╡рдХ

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)
    }
}

рдЙрддреНрдкрд╛рджрди

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдФрд░ рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░

рддрдВрддреНрд░
рдЖрд╡реЗрджрди, рдЯрд┐рдкреНрдкрдгреА

рдпреЛрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
рдкреНрд░реЗрд╖рд┐рдд рдкреИрдХреЗрдЯ рдореЗрдВ рдмрд┐рдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдШрдбрд╝реА
рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЯ рдпрд╛ рдЙрд╕рдХреА рд░рд╕реАрдж рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рджреМрд░рд╛рди рдЦреЛ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рдкреИрдХреЗрдЯ рджреЗрд░реА рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреЛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ (рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдВрддрд░рд╛рд▓ рдХреА рд╕рдордпрдкреВрд░реНрд╡ рд╕рдорд╛рдкреНрддрд┐), рдпрд╛ рд░рд╕реАрдж рдЦреЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреБрди: рдкреНрд░реЗрд╖рдг рд╕реЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдкрд░ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкреИрдХреЗрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред

рдХреНрд░рдорд╛рдВрдХ
рдкреНрд░реЗрд╖рдХ рд╕реЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рддрдХ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдХреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рдкреНрдд рдкреИрдХреЗрдЯреЛрдВ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдорд╛рди рдкреИрдХреЗрдЯ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреИрдХреЗрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВ

рдкреБрд╖реНрдЯрд┐
рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдЫреЛрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрд░ рдХреЛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЯ рдпрд╛ рдкреИрдХреЗрдЯреЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдкрд╛рд╡рддреА рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдкреИрдХреЗрдЯреЛрдВ рдХреА рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдФрд░ рд╕рдореВрд╣ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдирдХрд╛рд░рд╛рддреНрдордХ рдкреБрд╖реНрдЯрд┐
рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рдХ рдХреЛ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЯ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ред рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╛рд╡рддреА рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЙрд╕ рдкреИрдХреЗрдЯ рдХреА рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛

рдЦрд┐рдбрд╝рдХреА, рдХрдиреНрд╡реЗрдпрд░рд╛рдЗрдЬреЗрд╢рди
рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреИрдХреЗрдЯ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рд╡рддреА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдорд▓реНрдЯреАрдХрд╛рд╕реНрдЯ рдФрд░ рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдереНрд░реВрдкреБрдЯ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ, рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рд░рд┐рд╕реАрд╡рд┐рдВрдЧ рдПрдВрдб рдХреА рд░рд┐рд╕реЗрдкреНрд╢рди рдФрд░ рдмрдлрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдг

╨Т рдЦрдЬрд╛рдиреЗ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ