Π’Π΅ΠΌ, ΠΊΡΠΎ
ΠΡΠ°ΡΠΊΠΎ
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π°
ΠΡΠΎΡΠΎΠΊΠΎΠ» ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ
ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΠΈΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ Ρ ΠΎΡΡΠ°Ρ . ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π», Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ΠΌ (ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠ°Π»Π΅Π΅ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΌΡ ΡΡΠΎΠ²Π½Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ, Π³Π΄Π΅ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ) ΠΈ ΠΎΡΡΡΠ»Π°Π΅ΡΡΡ. ΠΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈΠ· Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ Π²Π²Π΅ΡΡ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠΌΡ ΡΡΠΎΠ²Π½Ρ. ΠΠ°Π»Π΅Π΅ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ°Π»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ.
ΠΡΠΈΠ½ΡΠΈΠΏΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠ°Π΄Π΅ΠΆΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ. ΠΡΠΏΡΠ°Π²Π»ΡΡΡΠ°Ρ ΡΡΠΎΡΠΎΠ½Π° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π² ΠΊΠ°Π½Π°Π».
Π‘Π΅ΡΠ²Π΅Ρ
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)
}
}
ΠΡΠ²ΠΎΠ΄
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΡΠΌΠΌΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π±ΠΈΡΠΎΠ²ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅
Π’Π°ΠΉΠΌΠ΅Ρ
ΠΡΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π΅Π³ΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΊΠ²ΠΈΡΠ°Π½ΡΠΈΡ ΠΏΠΎΡΠ΅ΡΡΠ½Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ, Π½ΠΎ Π½Π΅ ΡΠ΅ΡΡΠ΅ΡΡΡ (ΠΏΡΠ΅ΠΆΠ΄Π΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ), Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ΅ΡΡ ΠΊΠ²ΠΈΡΠ°Π½ΡΠΈΠΈ, ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅
ΠΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΠΎΠΉ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ
ΠΎΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΠΊ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ. Π Π°Π·ΡΡΠ²Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΡ
Π½ΠΎΠΌΠ΅ΡΠ°Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΏΠΎΡΠ΅ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΡΠ±Π»ΠΈΡΡΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°
ΠΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ Π³ΡΡΠΏΠΏΠΎΠ²ΡΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ
ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π±ΡΠ» ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½
ΠΠΊΠ½ΠΎ, ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈΠ·Π°ΡΠΈΡ
ΠΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΡ
Π½ΠΎΠΌΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡΡΠΏΠΏΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠΠ°ΠΊ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΡΠΈΡΠ°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈ Π±ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠ²Π½Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΠΈ
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Go Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com