рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рдЬреНрдпрд╛рдВрдирд╛ рд╢реЛрдзрддреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдгрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд.

рдереЛрдбрдХреНрдпрд╛рдд

рд▓реЗрдЦ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рдирдЪреНрдпрд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЛ, рдЙрджрд╛рд╣рд░рдгреЗ рд▓рд╛рдЧреВ рдХрд░рддреЛ Go, UDP рдЖрдгрд┐ TCP рд╕рд╣. рдЖрдзрд╛рд░реАрдд рд╡реЗрд│рд╛, ╨┤╨▓╨░, рддреАрди рдЖрдгрд┐ "рдХреЙрдореНрдкреНрдпреБрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХреНрд╕. рдЯреЙрдк-рдбрд╛рдЙрди рдЕреЕрдкреНрд░реЛрдЪ" рд╣реА рдкреБрд╕реНрддрдХреЗ рдирд╛рд╣реАрддрд░ рдкреНрд░рддреНрдпреЗрдХрдЬрдг рдлрдХреНрдд рдЯреЕрдиреЗрдирдмреЙрдо рдЖрдгрд┐ рдУрд▓рд┐рдлреЗрд░реЛрд╡реНрд╣рдЪреА рдЪрд░реНрдЪрд╛ рдХрд░рдд рдЖрд╣реЗ.

рд╡рд╛рд╣рддреВрдХ рд╕реНрддрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╣реЛрд╕реНрдЯрд╡рд░ рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдХреЛрдирд╛рддреВрди, рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рдереЗрдЯ рдЬреЛрдбрдгрд╛рд▒реНрдпрд╛ рдЪреЕрдиреЗрд▓рд╕рд╛рд░рдЦреЗ рджрд┐рд╕рддреЗ.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рд╡рд╛рд╣рддреВрдХ рд╕реНрддрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдВрдб рд╕рд┐рд╕реНрдЯреАрдо рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдиреЗрдЯрд╡рд░реНрдХ рд░рд╛рдЙрдЯрд░рджреНрд╡рд╛рд░реЗ рдирд╛рд╣реА (- - рд╡рдЧрд│рддрд╛ DPI). рдкреНрд░реЗрд╖рдХрд╛рдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ, рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рдкрд╛рдард╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпреЗрддреВрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдгрд╛рд░рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдпрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рдкреЕрдХреЗрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ рдЬреНрдпрд╛рд▓рд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдореНрд╣рдгрддрд╛рдд.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рд╣реЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЗрдпрд░ рдореЗрд╕реЗрдЬрдЪреЗ рддреБрдХрдбреНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрди (рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕) рдХрд░реВрди рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рд╣реЗрдбрд░ рдЬреЛрдбреВрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

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

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рдирдЪреА рддрддреНрддреНрд╡реЗ

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

рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдХреЗрд╕. рдкрд╛рдард╡рдгрд╛рд░реА рдмрд╛рдЬреВ рдлрдХреНрдд рд╡рд░рдЪреНрдпрд╛ рд▓реЗрдпрд░рдордзреВрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ, рддреЗ рдЕрд╕рд▓реЗрд▓реЗ рдкреЕрдХреЗрдЯ рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рдЪреЕрдиреЗрд▓рд▓рд╛ рдкрд╛рдард╡рддреЗ.

╨б╨╡╤А╨▓╨╡╤А

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

рд╕рдВрднрд╛рд╡реНрдп рддреНрд░реБрдЯреАрдВрд╕рд╣ рдЪреЕрдиреЗрд▓рд╡рд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рди

рдкреБрдврдЪреА рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рд╕рд░реНрд╡ рдкреНрд░рд╕рд╛рд░рд┐рдд рдкреЕрдХреЗрдЯ рдЬреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдкрд╛рдард╡рд▓реЗ рдЧреЗрд▓реЗ рддреНрдпрд╛рдЪ рдХреНрд░рдорд╛рдиреЗ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ рдЖрд╣реЗрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рдгреЗ, рдкрд░рдВрддреБ рдЪреЕрдиреЗрд▓ рдХрдзреАрдХрдзреА рд╡рд┐рдХреГрддреАрд╕рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ рддреНрдпрд╛рддреАрд▓ рдмрд┐рдЯреНрд╕ рдЦрд░рд╛рдм рд╣реЛрдК рд╢рдХрддрд╛рдд.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЦрд╛рд▓реАрд▓ рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд:

  • рддреНрд░реБрдЯреА рд╢реЛрдзрдгреЗ;
  • рдЕрднрд┐рдкреНрд░рд╛рдп
  • рд░реАрдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди

рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреНрдпрд╛рдд рдЯреНрд░рд╛рдиреНрд╕рдорд┐рд╢рди рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рди рдпрдВрддреНрд░рдгрд╛ рдЕрд╕рддреЗ рддреНрдпрд╛рдВрдирд╛ рдСрдЯреЛрдореЕрдЯрд┐рдХ рд░рд┐рдкреАрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ (рдПрдЖрд░рдХреНрдпреВ) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореНрд╣рдгрддрд╛рдд.
рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛ рдкрдХреНрд╖рд╛рд▓рд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдкреЕрдХреЗрдЯрдЪреНрдпрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдгрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрдмрджреНрджрд▓ рдХреЛрдгрддреАрд╣реА рдорд╛рд╣рд┐рддреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА рддреЗрд╡реНрд╣рд╛ рдкрд╛рд╡рддреНрдпрд╛рдВрдордзреАрд▓ рддреНрд░реБрдЯреАрдВрдЪреА рд╢рдХреНрдпрддрд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ.
рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг, TCP рдордзреНрдпреЗ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдкреЕрдХреЗрдЯрдЪрд╛ рдХреНрд░рдо рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдкреЕрдХреЗрдЯрдордзреНрдпреЗ рдирд╡реАрди рдлреАрд▓реНрдб рдЬреЛрдбрдгреЗ рдЖрд╣реЗ.

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

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

рд╡рд┐рдХреГрддреАрд╕рд╣, рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдкреЕрдХреЗрдЯ рддреЛрдЯрд╛ рдЖрд╣реЗ.
рдЖрдгрд┐ рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдпрдВрддреНрд░рдгрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  • рдкреЕрдХреЗрдЯ рдЧрдорд╛рд╡рдгреНрдпрд╛рдЪреА рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ;
  • рд╣рд░рд╡рд▓реЗрд▓реНрдпрд╛ рдкреЕрдХреЗрдЯрдЪреА рдкрд░рдд рдбрд┐рд▓рд┐рд╡реНрд╣рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдкрдХреНрд╖рд╛рд▓рд╛.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреЕрдХреЗрдЬрдЪреНрдпрд╛ рдиреБрдХрд╕рд╛рдирд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкрд╛рд╡рддреА рдЧрдорд╛рд╡рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реАрд╣реА рдЧрдорд╛рд╡рд▓реЗ рдирд╕рд▓реНрдпрд╛рд╕, рд▓рдХреНрд╖рдгреАрдп рд╡рд┐рд▓рдВрдмрд╛рдиреЗ рд╡рд┐рддрд░рдг. рд╕рд░реНрд╡ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рд╕рдорд╛рди рдЧреЛрд╖реНрдЯ рдХреЗрд▓реА рдЬрд╛рддреЗ: рдкреЕрдХреЗрдЯ рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╡реЗрд│ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╣реА рдпрдВрддреНрд░рдгрд╛ рдХрд╛рдЙрдВрдЯрдбрд╛рдЙрди рдЯрд╛рдЗрдорд░ рд╡рд╛рдкрд░рддреЗ, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдордзреНрдпрд╛рдВрддрд░рд╛рдЪреА рд╕рдорд╛рдкреНрддреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рддрд░ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдирд┐рд╡реНрд╡рд│ TCPKeepAlive рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ 15 рд╕реЗрдХрдВрджрд╛рдВрд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ:

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

рдкрд╛рдард╡рдгрд╛рд░реНтАНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдкреЕрдХреЗрдЯ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░ рдЯрд╛рдЗрдорд░ рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдкрд╣рд┐рд▓реА рдЖрдгрд┐ рджреБрд╕рд░реА рджреЛрдиреНрд╣реА рд╡реЗрд│реА), рдЯрд╛рдЗрдорд░рдордзреВрди рд╡реНрдпрддреНрдпрдп рд╣рд╛рддрд╛рд│рдгреЗ рдЖрдгрд┐ рддреЗ рдерд╛рдВрдмрд╡рдгреЗ.

рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреНрдпрд╛ рдореБрдЦреНрдп рд╕рдВрдХрд▓реНрдкрдирд╛рдВрд╢реА рдкрд░рд┐рдЪрд┐рдд рдЭрд╛рд▓реЛ рдЖрд╣реЛрдд:

  • рдЪреЗрдХрд╕рдо
  • рдкреЕрдХреЗрдЬреЗрд╕рдЪреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛;
  • рдЯрд╛рдЗрдорд░;
  • рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЖрдгрд┐ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╛рд╡рддреНрдпрд╛.

рдкрдг рддреЗ рд╕рд░реНрд╡ рдирд╛рд╣реА!

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

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

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░рдЪреА рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ

рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдореБрд│реЗ рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреА рд╣реЛрддрд╛рдд:

  • рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА рд╡рд╛рдврд╡рдгреЗ, рдХрд╛рд░рдг рд╕рд░реНрд╡ рдкрд╛рдард╡рд┐рд▓реЗрд▓реЗ рдкреЕрдХреЗрдЯ (рдкреБрдирд░реНрдкреНрд░реЗрд╖рдг рд╡рдЧрд│рддрд╛) рдЕрджреНрд╡рд┐рддреАрдпрдкрдгреЗ рдУрд│рдЦрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ;
  • рдЯреНрд░рд╛рдиреНрд╕рдорд┐рдЯрд┐рдВрдЧ рдЖрдгрд┐ рд░рд┐рд╕реАрд╡реНрд╣рд┐рдВрдЧ рдмрд╛рдЬреВрдВрд╡рд░ рдмрдлрд░ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ.

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

  • рдПрди рдкреЕрдХреЗрдЯ рдкрд░рдд рдХрд░рд╛;
  • рдирд┐рд╡рдбрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА.

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

рдирд┐рд╖реНрдХрд░реНрд╖

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдЖрдгрд┐ рд╡рд╛рдкрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпрдВрддреНрд░рдгрд╛

рдпрдВрддреНрд░рдгрд╛
рдЕрд░реНрдЬ, рдЯрд┐рдкреНрдкрдгреА

рдмреЗрд░реАрдЬ рддрдкрд╛рд╕рд╛
рдкреНрд░рд╕рд╛рд░рд┐рдд рдкреЕрдХреЗрдЯрдордзреАрд▓ рдмрд┐рдЯ рддреНрд░реБрдЯреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ

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

рдЕрдиреБрдХреНрд░рдорд╛рдВрдХ
рдкреНрд░реЗрд╖рдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рдХрдбреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдкреЕрдХреЗрдЯрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдорд╛рдВрдХрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдкреЕрдХреЗрдЯреНрд╕рдЪреНрдпрд╛ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдВрдордзреАрд▓ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рд╕ рдкреЕрдХреЗрдЯрдЪреЗ рдиреБрдХрд╕рд╛рди рд╢реЛрдзреВ рджреЗрддреЗ. рд╕рдорд╛рди рдкреЕрдХреЗрдЯ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдореНрд╣рдгрдЬреЗ рдкреЕрдХреЗрдЯ рдПрдХрдореЗрдХрд╛рдВрдЪреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЖрд╣реЗрдд

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

рдирдХрд╛рд░рд╛рддреНрдордХ рдкреБрд╖реНрдЯреАрдХрд░рдг
рдкреНрд░реЗрд╖рдХрд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╛рдкреНрддрдХрд░реНрддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдкреЕрдХреЗрдЯ рдЪреБрдХреАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ рдЖрд╣реЗ. рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╛рд╡рддреАрдордзреНрдпреЗ рд╕рд╣рд╕рд╛ рдкреЕрдХреЗрдЯрдЪрд╛ рдХреНрд░рдо рдХреНрд░рдорд╛рдВрдХ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддреЛ рдЬреЛ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓рд╛ рдирд╛рд╣реА

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

рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧрд╕рд╛рдареА рдЧреЛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЗ

╨Т рднрд╛рдВрдбрд╛рд░.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛