ืฆื ืื ืืืืก
Briefly
ืืขืจ ืึทืจืืืงื ืืืกืงืึทืกื ืื ืืึทืกืืงืก ืคืื ืคืึทืจืืึธืืืขื ืืึทืื ืืจืึทื ืกืืืกืืข, ืืืคึผืืึทืืึทื ืฅ ืืืืฉืคืืื ืืืืฃ
ืึทืจืืืขืจืคืืจื ืฉืืืืข ืคึผืจืึธืืึธืงืึธื
ืคึผืจืึธืืืืืขืก ืึท ืืึทืืืฉืืงืึทื ืงืฉืจ ืฆืืืืฉื ืึทืคึผืืึทืงืืืฉืึทื ืคึผืจืึทืกืขืกืึทื ืคืืืกื ืืืง ืืืืฃ ืคืึทืจืฉืืืขื ืข ืืื ืืช. ืคึฟืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืคึผืขืจืกืคึผืขืงืืืื, ืึท ืืึทืืืฉืืงืึทื ืงืฉืจ ืงืืงื ืืื ืึท ืงืึทื ืึทื ืืืึธืก ืืืืื ืงืึทื ืขืงืฅ ืคึผืจืึทืกืขืกืึทื.
ืืขื ืืื ืืขืืื ืืืจื ืกืคึผืืืืื ื (ืืืื ื ืืืืืง) ืื ืึทืคึผืืึทืงืืืฉืึทื ืฉืืืืข ืึทืจืืืงืืขื ืืื ืคืจืึทืืืึทื ืฅ ืืื ืึทืืื ื ืึท ืึทืจืืืขืจืคืืจื ืฉืืืืข ืืขืืขืจ ืฆื ืืขืืขืจ ืคืื ืืื.
ืืขืจ ืืจืึทื ืกืคึผืึธืจื ืฉืืืืข ืืขืืึธืื ืคึผืึทืกืื ืื ืึธืคึผืฉื ืื ืฆื ืื ืกืขื ืืขืจ ืก ื ืขืฅ ืฉืืืืข, ืืื ืื ืึธืคึผืฉื ืื ืืื ืขื ืงืึทืคึผืกืึทืืืืืื ืืื ืึท ื ืขืฅ ืฉืืืืข ืคึผืึทืงืึทื (ืืึทืืึทืืจืึทื) ืืื ืืขืฉืืงื. ืืื ืื ืจืืกืืืืื ื ืกืืฃ, ืื ื ืขืฅ ืฉืืืืข ืขืงืกืืจืึทืงืฅ ืื ืืจืึทื ืกืคึผืึธืจื ืฉืืืืข ืึธืคึผืฉื ืื ืคืื ืื ืืึทืืึทืืจืึทื ืืื ืคึผืึทืกืื ืขืก ืึทืจืืืฃ ืฆื ืื ืึทืจืืืขืจืคืืจื ืฉืืืืข. ืืขืจื ืึธื, ืื ืึทืจืืืขืจืคืืจื ืฉืืืืข ืคึผืจืึทืกืขืกืึทื ืื ืืืงืืืขื ืึธืคึผืฉื ืื ืึทืืื ืึทื ืื ืืึทืื ืืขื ืขื ืืืจืขืืืืื ืคึฟืึทืจ ืื ืจืืกืืืืื ื ืึทืคึผืืึทืงืืืฉืึทื.
ืคึผืจืื ืกืึทืคึผืึทืื ืคืื ืคืึทืจืืึธืืืขื ืืึทืื ืืจืึทื ืกืืืกืืข
ืคืึทืจืืึธืืืขื ืืึทืื ืืจืึทื ืกืืืกืืข ืืืืขืจ ืึท ืืึธืจ ืืืืขืจ ืงืึทื ืึทื
ืื ืกืืืคึผืืึทืกื ืคืึทื. ืื ืฉืืงื ืืืื ืืืงืืื ืคืฉืื ืื ืืึทืื ืคืื ืืขืจ ืืืืืขืจืฉืืขืจ ืฉืืืืข, ืงืจืืืืฅ ืึท ืคึผืึทืงืึทื ืืื ืขืก, ืืื ืกืขื ืื ืขืก ืฆื ืื ืงืึทื ืึทื.
ืกืขืจืืืืจืขืจ
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) ืคึผืจืึธืืึธืงืึธืืก.
ืืื ืืขืจืฆื, ืขืก ืืื ืืืขืจื ืงืึทื ืกืืืขืจืื ื ืื ืืขืืืขืืงืืื ืคืื ืขืจืจืึธืจืก ืืื ืจืืกืืฅ, ืืืขื ืื ืจืืกืืืืื ื ืคึผืึทืจืืื ืืืขื ื ืืฉื ืืึทืงืืืขื ืงืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืื ืจืขืืืืืึทืื ืคืื ืื ืึทืจืืืขืจืคืืจื ืคืื ืื ืืขืฆืืข ืคึผืึทืงืึทื.
ืื ืืืืืื ื ืฆื ืืขื ืคึผืจืึธืืืขื, ืืืื ืืขื ืืฆื ืืื TCP, ืืื ืฆื ืืืืื ืึท ื ืืึทืข ืคืขืื ืฆื ืื ืืึทืื ืคึผืึทืงืึทื ืืื ืื ืกืืงืืืึทื ืก ื ืืืขืจ ืคืื ืื ืคึผืึทืงืึทื.
ืคืึทืจืืึธืืืขื ืืึทืื ืืจืึทื ืกืืืกืืข ืืืืขืจ ืึท ืึทื ืจืืืืืึทืืึทื ืงืึทื ืึทื ืืื ืืขืจืืขื ืืง ืฆื ืคึผืึทืงืึทื ืืืกืืึธืจืฉืึทื ืืื ืึธื ืืืขืจ
ืฆืืืืืขื ืืื ืืืกืืึธืจืฉืึทื, ืืืืืขืจ, ืขืก ืืื ืคึผืึทืงืึทื ืึธื ืืืขืจ ืืื ืื ื ืขืฅ.
ืืื ืฆื ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื, ืืขืงืึทื ืืืึทืื ืืขื ืขื ืคืืจืืื ืื:
- ืืืืขืจืืึทื ืื ื ืื ืคืึทืงื ืคืื ืคึผืึทืงืึทื ืึธื ืืืขืจ;
- ืฉืืึทืขื-ืขืงืกืคึผืจืขืก ืคืื ืคืึทืจืคืึทืื ืคึผืึทืงืืฅ ืฆื ืื ืจืืกืืืืื ื ืคึผืึทืจืืื.
ืึทืืืืืืึธื ืึทืืื, ืืื ืึทืืืฉืึทื ืฆื ืื ืึธื ืืืขืจ ืคืื ืื ืคึผืขืงื, ืขืก ืืื ื ืืืืืง ืฆื ืฆืืฉืืขืื ืื ืืขืืืขืืงืืื ืคืื ืึธื ืืืขืจ ืคืื ืงืึทืืึธืืข ืึธืืขืจ, ืืืื ืืึธืจื ืืฉื ืืื ืคืึทืจืคืึทืื, ืืืื ืขืงืกืคึผืจืขืก ืืื ืึท ืืึทืืืืืืง ืคืึทืจืืึทืืื. ืืื ืึทืืข ืงืึทืกืขืก, ืื ืืขืืืข ืืึทื ืืื ืืขืืื: ืื ืคึผืึทืงืึทื ืืื ืจืืืจืึทื ืกืืืืืขื. ืฆื ืงืึธื ืืจืึธืืืจื ืฆืืื, ืืขื ืืขืงืึทื ืืืึทื ื ืืฆื ืึท ืงืึธืื ืืืึธืืื ืืืึทืืขืจ, ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืืึทืฉืืืกื ืื ืกืืฃ ืคืื ืื ืืืืจืื ืืขืืึทืืขื. ืึทืืื ืืื ืืขื ืคึผืขืงื
// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
defaultTCPKeepAlive = 15 * time.Second
)
ืื ืฉืืงื ืืืึทื ืืึทืจืฃ ืึธื ืืืืื ืึท ืืืึทืืขืจ ืืขืืขืจ ืืึธื ืึท ืคึผืึทืงืึทื ืืื ืืจืึทื ืกืืืืืขื (ืกืื ืืขืจ ืขืจืฉืืขืจ ืืื ืื ืฆืืืืื ืืึธื), ืฉืขืคึผื ืื ืืขืจืึทืคึผืฉืึทื ื ืคืื ืื ืืืึทืืขืจ ืืื ืืึทืืื ืขืก.
ืึทืืื, ืืืจ ืืึธืื ืืืขืจื ืืึทืงืึทื ื ืืื ืื ืฉืืืกื ืงืึทื ืกืขืคึผืก ืคืื ืคืึทืจืืึธืืืขื ืืึทืื ืึทืจืืืขืจืคืืจื ืคึผืจืึธืืึธืงืึธืืก:
- ืืฉืขืงืกืึทืื;
- ืกืืงืืืึทื ืก ื ืืืขืจื ืคืื ืคึผืึทืงืึทืืืฉืึทื;
- ืืืืืขืจืก;
- positive ืืื ื ืขืืึทืืืื ืจืืกืืฅ.
ืืืขืจ ืึทื ืก ื ืื ืึทืืข!
ืคืึทืจืืึธืืืขื ืืึทืื ืึทืจืืืขืจืคืืจื ืคึผืจืึธืืึธืงืึธื ืืื ืคึผืืืคึผืืืื ืื ื
ืืื ืื ืืืึทืจืืึทื ื ืืืึธืก ืืืจ ืืึธืื ืฉืืื ืืึทืืจืึทืื, ืื ืคืึทืจืืึธืืืขื ืขืงืกืคึผืจืขืก ืคึผืจืึธืืึธืงืึธื ืืื ืืืืขืจ ืืึทืืืึธื ืืฉ. ืขืก ืืืืื ืฆื "ืคึผืึทืืขืืขื ืึทืจืึธืคึผ" ืื ืืจืึทื ืกืืืกืืข ืฆืืืขืฉืืขืื ืืืจื ืื ืงืึธืืื ืืงืึทืฆืืข ืงืึทื ืึทื ืืืขื ืื RTT ืื ืงืจืืกืื. ืฆื ืคืึทืจืืจืขืกืขืจื ืืืึทื ืขืคืขืงืืืืืงืืึทื ืืื ืืขืกืขืจ ื ืืฆื ืื ืงืึธืืื ืืงืึทืฆืืข ืงืึทื ืึทื ืงืึทืคึผืึทืฆืืืขื, ืคึผืืืคึผืืืื ืืื ืืขื ืืฆื.
ืื ื ืืฆื ืคืื ืคึผืืืคึผืืืื ืคืืจื ืฆื:
- ืื ืงืจืืกืื ื ืื ืงืืื ืคืื ืกืืงืืืึทื ืก ื ืืืขืจื, ืืืืึทื ืึทืืข ืืขืฉืืงื ืคึผืึทืงืืฅ (ืึทืืืฅ ืคึฟืึทืจ ืจืขืืจืึทื ืกืืืฉืึทื ื) ืืืื ืืืื ืืืืขื ืึทืคืืื ืืื ืืงืื;
- ืื ื ืืื ืฆื ืคืึทืจืืจืขืกืขืจื ืืึทืคืขืจื ืืืืฃ ืื ืืจืึทื ืกืืืืื ื ืืื ืจืืกืืืืื ื ืืืืื.
ืื ืกืืงืืืึทื ืก ื ืืืขืจ ืงืืื ืืื ืืึทืคืขืจ ืืจืืืก ืจืขืงืืืืจืขืืขื ืฅ ืึธืคืขื ืืขื ืืืืฃ ืื ืึทืงืฉืึทื ื ืื ืคึผืจืึธืืึธืงืึธื ื ืขืื ืืื ืขื ืืคืขืจ ืฆื ืคึผืึทืงืึทื ืงืึธืจืืคึผืฆืืข, ืึธื ืืืขืจ ืืื ืคืึทืจืืึทืืื. ืืื ืืขื ืคืึทื ืคืื ืคึผืืืคึผืืืื, ืขืก ืืขื ืขื ืฆืืืื ืืขืืืึธืืก ืคึฟืึทืจ ืงืขืจืขืงืืื ื ืขืจืจืึธืจืก:
- ืฆืืจืืงืงืืืขื 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 ืคึฟืึทืจ ื ืขืืืืึธืจืงืื ื
ะ
ืืงืืจ: www.habr.com