рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ
рд╕рдВрдХреНрд╖рд┐рдкреНрдд
рд▓реЗрдЦ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рд╡рд┐рднрд┐рдиреНрди рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓ рд░рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдмрдВрдз рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдЪреИрдирд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реАрдзреЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
╨Ф╨░╨╗╨╡╨╡ ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╤Л╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨┐╨╡╤А╨╡╨┤╨░╨╡╤В ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤Б╨╡╤В╨╡╨▓╨╛╨╝╤Г ╤Г╤А╨╛╨▓╨╜╤О ╨╛╤В╨┐╤А╨░╨▓╨╕╤В╨╡╨╗╤П, ╨│╨┤╨╡ ╤Б╨╡╨│╨╝╨╡╨╜╤В ╨╕╨╜╨║╨░╨┐╤Б╤Г╨╗╨╕╤А╤Г╨╡╤В╤Б╤П ╨▓ ╨┐╨░╨║╨╡╤В ╤Б╨╡╤В╨╡╨▓╨╛╨│╨╛ ╤Г╤А╨╛╨▓╨╜╤П (╨┤╨╡╨╣╤В╨░╨│╤А╨░╨╝╨╝╤Г) ╨╕ ╨╛╤В╤Б╤Л╨╗╨░╨╡╤В╤Б╤П. ╨Э╨░ ╨┐╤А╨╕╨╜╨╕╨╝╨░╤О╤Й╨╡╨╣ ╤Б╤В╨╛╤А╨╛╨╜╨╡ ╤Б╨╡╤В╨╡╨▓╨╛╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨╕╨╖╨▓╨╗╨╡╨║╨░╨╡╤В ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╨╛╨│╨╛ ╤Г╤А╨╛╨▓╨╜╤П ╨╕╨╖ ╨┤╨╡╨╣╤В╨░╨│╤А╨░╨╝╨╝╤Л ╨╕ ╨┐╨╡╤А╨╡╨┤╨░╨╡╤В ╨╡╨│╨╛ ╨▓╨▓╨╡╤А╤Е ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╨╛╨╝╤Г ╤Г╤А╨╛╨▓╨╜╤О. ╨Ф╨░╨╗╨╡╨╡ ╤В╤А╨░╨╜╤Б╨┐╨╛╤А╤В╨╜╤Л╨╣ ╤Г╤А╨╛╨▓╨╡╨╜╤М ╨╛╨▒╤А╨░╨▒╨░╤В╤Л╨▓╨░╨╡╤В ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╜╤Л╨╣ ╤Б╨╡╨│╨╝╨╡╨╜╤В ╤В╨░╨║╨╕╨╝ ╨╛╨▒╤А╨░╨╖╨╛╨╝, ╤З╤В╨╛╨▒╤Л ╨╡╨│╨╛ ╨┤╨░╨╜╨╜╤Л╨╡ ╤Б╤В╨░╨╗╨╕ ╨┤╨╛╤Б╤В╤Г╨┐╨╜╤Л ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤О-╨┐╨╛╨╗╤Г╤З╨░╤В╨╡╨╗╤О.
рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдЪреИрдирд▓ рдкрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛. рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдкрдХреНрд╖ рдХреЗрд╡рд▓ рдКрдкрд░реА рдкрд░рдд рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдпреБрдХреНрдд рдПрдХ рдкреИрдХреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЪреИрдирд▓ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред
рд╕реЗрд╡рдХ
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) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд░рд╕реАрджреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬрдм рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдХреЛ рдЕрдВрддрд┐рдо рдкреИрдХреЗрдЯ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрд╕реАрдкреА рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреИрдХреЗрдЯ рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдкреИрдХреЗрдЯ рд╡рд┐рд░реВрдкрдг рдФрд░ рд╣рд╛рдирд┐ рдХреЗ рдЕрдзреАрди рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЪреИрдирд▓ рдкрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди
рд╡рд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рднреА рд╣реЛрддреА рд╣реИред
рдФрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рдХреЗ рддрдереНрдп рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг;
- рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрдХреНрд╖ рдХреЛ рдЦреЛрдП рд╣реБрдП рдкреИрдХреЗрдЯреЛрдВ рдХреА рдкреБрдирдГ рдбрд┐рд▓реАрд╡рд░реАред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдкреИрдХреЗрдЬ рдХреЗ рдЦреЛ рдЬрд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╕реАрдж рдХреЗ рдЦреЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╛, рдпрджрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдбрд┐рд▓реАрд╡рд░реА рдХрд╛рдлреА рджреЗрд░реА рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреИрдХреЗрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдВрддреНрд░ рдПрдХ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдВрдд рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддреЛ рдкреИрдХреЗрдЬ рдореЗрдВ
// 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