เปเบเปเบเบนเปเบเบตเป
เปเบฅเบเบฐเบชเบฑเปเบเป
เบเบปเบเบเบงเบฒเบกเบชเบปเบเบเบฐเบเบฒเบเบทเปเบเบเบฒเบเบเบญเบเบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเป, เบเบฐเบเบดเบเบฑเบเบเบปเบงเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบ
เปเบเบฃเปเบเบเปเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบ
เบชเบฐเบซเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบขเปเบฒเบเบกเบตเปเบซเบเบเบปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฐเบเบงเบเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเปเบฎเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบตเปเบกเบตเปเบซเบเบเบปเบเปเบเบดเปเบเบเบทเบงเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฒเบเบเบตเปเปเบเบทเปเบญเบกเบเปเปเปเบเบเบเบปเบเบเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเปเบฒเบเป.
เบเบตเปเปเบกเปเบเปเบฎเบฑเบเปเบเปเปเบเบเบเบฒเบเปเบเบ (เบเปเบฒเบเปเบฒเปเบเบฑเบ) เบเปเปเบเบงเบฒเบกเบเบฑเปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบ fragments เปเบฅเบฐเปเบเบตเปเบก header เบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบเบเบฑเบเปเบเปเบฅเบฐเบเบปเบเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒ.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบเบเบฐเบเปเบฒเบ segment เปเบเบซเบฒเบเบฑเปเบเปเบเบทเบญเบเปเบฒเบเบเบญเบเบเบนเปเบชเบปเปเบ, เบเปเบญเบเบเบตเป segment เปเบเปเบเบทเบ encapsulated เปเบ packet เบเบฑเปเบเปเบเบทเบญเบเปเบฒเบ (datagram) เปเบฅเบฐเบชเบปเปเบ. เปเบเบเบญเบเบเปเบฒเบเบเบญเบเบเบฒเบเบฎเบฑเบ, เบเบฑเปเบเปเบเบทเบญเบเปเบฒเบเบชเบฐเบเบฑเบเบชเปเบงเบเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบเบเบฒเบ datagram เปเบฅเบฐเบชเบปเปเบเบกเบฑเบเปเบเบดเบเบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบ. เบเปเปเปเบ, เบเบฑเปเบเบเบฒเบเบเบปเบเบชเบปเปเบเบเบฐเบเบฐเบกเบงเบเบเบปเบเบชเปเบงเบเบเบตเปเปเบเปเบฎเบฑเบเปเบเบทเปเบญเปเบซเปเบเปเปเบกเบนเบเบเบญเบเบกเบฑเบเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเปเบเปเบฎเบฑเบ.
เบซเบผเบฑเบเบเบฒเบเบเบญเบเบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเป
เบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบตเปเบเบญเบเปเบเบขเปเบฒเบเบชเบปเบกเบเบนเบ
เบเปเบฅเบฐเบเบตเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบ. เบเปเบฒเบเบเบฒเบเบชเบปเปเบเบเบฝเบเปเบเปเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเบฑเปเบเปเบเบดเบ, เบชเปเบฒเบเบเบธเบเบเบตเปเบกเบตเบกเบฑเบ, เปเบฅเบฐเบชเบปเปเบเบกเบฑเบเปเบเบซเบฒเบเปเบญเบเบเบฒเบ.
Server
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)
}
}
เบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเบเปเบฒเบเบเปเบญเบเบเบตเปเบกเบตเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเปเบเบฑเบเปเบเปเบเป
เบเบฑเปเบเบเบญเบเบเปเปเปเบเปเบกเปเบเบเบฒเบเบชเบปเบกเบกเบธเบเบงเปเบฒเปเบเบฑเบเปเบเบฑเบเบเบตเปเบเบทเบเบชเบปเปเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบเปเบฎเบฑเบเปเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบงเบเบกเบฑเบเบเบทเบเบชเบปเปเบ, เปเบเปเบเบดเบเปเบเบเบงเบเบกเบฑเบเบญเบฒเบเบเบฐเบเบทเบเบเปเบฒเบฅเบฒเบเบเปเบญเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบฒเบเบเบฑเปเบเบเปเบญเบเบเบฒเบเบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเบฒเบเบเบดเบเปเบเบทเบญเบ.
เปเบเบเปเบฅเบฐเบเบตเบเบฑเปเบเบเปเบฒเบงเบเบตเป, เบเบปเบเปเบเบเบฑเปเบเบเปเปเปเบเบเบตเปเบเบทเบเบเปเบฒเปเบเป:
- เบเบฒเบโเบเบงเบโเบชเบญเบโเบเบงเบฒเบกโเบเบดเบโเบเบฒเบโ;
- เบเปเบฒเบเบถเบเบเปเบฒเปเบซเบฑเบ;
- retransmission.
เปเบเปเบเบเบญเบเบเบฒเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเบเบตเปเบกเบตเบเบปเบเปเบเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบทเบเปเบซเบกเปเบซเบผเบฒเบเบเบฑเปเบเปเบกเปเบเปเบญเบตเปเบเบงเปเบฒเปเบเปเบเบเบญเบ repeat reQuest (ARQ) เบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเบเบดเบเบฒเบฅเบฐเบเบฒเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบญเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเปเบเบฎเบฑเบเปเบเบดเบ, เปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเบฎเบฑเบเบเบฐเบเปเปเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเปเบเปเบเปเบฝเบงเบเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฒเบเปเบญเบเบเบญเบเบชเบธเบเบเปเบฒเบ.
เบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเบฑเบเปเบเปเปเบ TCP, เปเบกเปเบเบเบฒเบเปเบเบตเปเบกเบเบฒเบเบชเบฐเบซเบเบฒเบกเปเบซเบกเปเปเบชเปเบเบธเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเปเบฒเบเบงเบเบฅเปเบฒเบเบฑเบเบเบญเบเปเบเบฑเบเปเบเบฑเบ.
เบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเบเปเบฒเบเบเปเบญเบเบเบตเปเบเปเปเบซเบเปเบฒเปเบเบทเปเบญเบเบทเปเบเปเบเบถเปเบเบเบฑเบเบเบฒเบเบเบดเบเปเบเบทเบญเบเบเบญเบเปเบเบฑเบเปเบเบฑเบเปเบฅเบฐเบเบฒเบเบชเบนเบเปเบชเบ
เบเบฝเบเบเบนเปเบเบฑเบเบเบฒเบเบเบดเบเปเบเบทเบญเบ, เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบกเบตเบเบฒเบเบชเบนเบเปเบชเบเปเบเบฑเบเปเบเบฑเบเปเบเปเบเบทเบญเบเปเบฒเบ.
เปเบฅเบฐเปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเบปเบเปเบเปเบกเปเบเบเปเบญเบเบเบฒเบ:
- เบเบฒเบเบเปเบฒเบเบปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบเบเบญเบเบเบฒเบเบชเบนเบเปเบชเบเปเบเบฑเบเปเบเบฑเบ;
- เบเบฒเบเบเบฑเบเบชเบปเปเบเบเบธเบเบเบตเปเบชเบนเบเปเบชเบเปเบเปเบซเปเบเบนเปเบฎเบฑเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเบฒเบเบชเบนเบเปเบชเบเบเบธเบ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบญเบเบเบฒเบเบชเบนเบเปเบชเบเปเบเบฎเบฑเบเปเบเบดเบเบซเบผเบท, เบเปเบฒเบเปเปเบกเบตเบซเบเบฑเบเบชเบนเบเปเบชเบ, เบเบฒเบเบเบฑเบเบชเบปเปเบเบเบญเบเบกเบฑเบเบกเบตเบเบงเบฒเบกเบเบฑเบเบเปเบฒเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ. เปเบเบเบธเบเบเปเบฅเบฐเบเบต, เบชเบดเปเบเบเบฝเบงเบเบฑเบเปเบกเปเบเปเบฎเบฑเบ: เบเบธเบเปเบเปเบเบทเบเบชเบปเปเบเบเบทเบ. เปเบเบทเปเบญเบเบงเบเบเบธเบกเปเบงเบฅเบฒ, เบเบปเบเปเบเบเบตเปเปเบเปเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒเบเบฑเบเบเบญเบเบซเบผเบฑเบ, เปเบเบดเปเบเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบเบธเบเบชเบดเปเบเบชเบธเบเบเบญเบเปเบฅเบเบฐเบฅเปเบเปเบฒ. เบเบฑเปเบเบเบฑเปเบเปเบเบเบธเบ
// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
defaultTCPKeepAlive = 15 * time.Second
)
เบเปเบฒเบเบเบฒเบเบชเบปเปเบเบเปเบญเบเปเบฅเบตเปเบกเบเบฑเบเปเบงเบฅเบฒเบเบธเบเบเบฑเปเบเบเบตเปเปเบเบฑเบเปเบเบฑเบเบเบทเบเบชเบปเปเบ (เบเบฑเบเบเบฑเปเบเบเบณเบญเบดเบ เปเบฅเบฐเบเบฑเปเบเบเบตเบชเบญเบ), เบเบฑเบเบเบฒเบเบเบฒเบเบฅเบปเบเบเบงเบเบเบฒเบเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒ เปเบฅเบฐเบขเบธเบเบกเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบธเปเบเปเบเบตเบเบเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบญเบเปเบเปเบเบเบญเบเบเบฒเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเป:
- checksums;
- เปเบฅเบเบฅเปเบฒเบเบฑเบเบเบญเบเบเบธเบ;
- เปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒ;
- เปเบเบฎเบฑเบเปเบเบดเบเปเบเบเบฒเบเบเบงเบเปเบฅเบฐเบเบฒเบเบฅเบปเบ.
เปเบเปเบเบฑเปเบเบเปเปเปเบกเปเบเบเบฑเบเบซเบกเบปเบ!
เบญเบฐเบเบธเบชเบฑเบเบเบฒเบเบฒเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเบเปเบงเบเบเบฒเบเบงเบฒเบเบเปเป
เปเบเบเบปเบงเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบดเบเบฒเบฅเบฐเบเบฒเปเบฅเปเบง, เปเบเปเบเบเบญเบเบเบฒเบเบเบฑเบเบชเบปเปเบเบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเปเบกเปเบเบเปเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบ. เบกเบฑเบเปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเบเบฐ "เบเปเบฒเบฅเบปเบ" เบเบฒเบเบเปเบฒเบเบเบญเบเบเบตเปเบชเบฐเบซเบเบญเบเปเบเบเบเปเบญเบเบเบฒเบเบเบฒเบเบชเบทเปเบชเบฒเบเบเปเบญเบเบงเปเบฒ RTT เปเบเบตเปเบกเบเบถเปเบ. เปเบเบทเปเบญเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบเบญเบเบกเบฑเบเปเบฅเบฐเบเปเบฒเปเบเปเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบญเบเบเปเบญเบเบเบฒเบเบเบฒเบเบชเบทเปเบชเบฒเบเบเบตเปเบเบตเบเบงเปเบฒ, เบเปเปเปเบกเปเบเบเบทเบเบเปเบฒเปเบเป.
เบเบฒเบโเบเปเบฒโเปเบเปโเบเปเปโเบเปเบฒโเปเบโเบชเบนเปโเบเบฒเบโ:
- เบเบฒเบเปเบเบตเปเบกเบฅเบฐเบเบฑเบเบเบญเบเบเบปเบงเปเบฅเบเบฅเปเบฒเบเบฑเบ, เบเบฑเบเบเบฑเปเบเปเบเปเปเบเบฑเบเปเบเบฑเบเบเบตเปเบชเบปเปเบเบเบฑเบเบซเบกเบปเบ (เบเบปเบเปเบงเบฑเปเบเบเบฒเบเบชเบปเปเบเบเบทเบ) เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเปเบฒเบเบปเบเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบ;
- เบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเปเบเบตเปเบกเบเบฐเบงเบตเบเบฒเบ buffers เปเบเบเปเบฒเบเบชเบปเปเบเปเบฅเบฐเบฎเบฑเบ.
เบเปเบงเบเปเบฅเบเบฅเบณเบเบฑเบ เปเบฅเบฐเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบฐเปเบฒเบเบเบญเบเบเบฑเบเปเบเบตเปเบกเปเบเบเบถเปเบเบเบฑเบเบเบฒเบเบเบฐเบเบณเบเบตเปเปเบเบฃเปเบเบเปเปเบฎเบฑเบเปเบเบทเปเบญเบเบญเบเบชเบฐเปเบญเบเบเปเปเบเบฒเบเบชเปเปเบฅเบฒเบเบเบฑเบเบซเบผเบงเบเบเบญเบเปเบเบฑเบเปเบเบฑเบ, เบเบฒเบเบชเบนเบเปเบชเบ, เปเบฅเบฐเบเบงเบฒเบกเบฅเปเบฒเบเปเบฒ. เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเปเป, เบกเบตเบชเบญเบเบงเบดเบเบตเบเบฒเบเปเบเปเปเบเบเปเปเบเบดเบเบเบฒเบ:
- return N เปเบเบฑเบเปเบเบฑเบเบเบทเบ;
- เบเบฒเบเบเปเบฒเบเบซเปเบญเบเบเบตเปเปเบฅเบทเบญเบ.
เบเบฒเบเบเบฑเบเบเบทเบ N packets - sliding window protocol
เบเบนเปเบชเบปเปเบเบเปเบญเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบชเบฒเบกเบเบฐเปเบเบเบเบญเบเปเบซเบเบเบฒเบ:
- เปเบเบซเบฒเปเบเบเปเบเปเบเบเบญเบเบฅเบฐเบเบฑเบเบชเบนเบเบเบงเปเบฒ. เปเบกเบทเปเบญเบเบฑเบเบเบฑเบเบเบฒเบเบชเบปเปเบเบเปเปเบกเบนเบเปเบญเบตเปเบเบงเปเบฒ "เบเบฒเบเบเปเบฒเบเปเบเบดเบ", เบเปเบฒเบเบชเบปเปเบเบเบฐเบเบงเบเปเบเบดเปเบเบฅเบฐเบเบฑเบเบเบญเบเบเบฒเบเบเบทเปเบกเบเปเปเบกเบนเบเบเบญเบเบเปเบญเบเบขเปเบฝเบก (เบเบฑเปเบเปเบกเปเบ, เบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบญเบ N เบเปเปเบเบงเบฒเบกเบเบตเปเบชเบปเปเบเบกเบฒเบฅเปเบเปเบฒเบเบฒเบเปเบเปเบฎเบฑเบเปเบเบฎเบฑเบเปเบเบดเบ). เบเปเบฒเบเปเบญเบเบขเปเบฝเบกเบซเบงเปเบฒเบเปเบเบปเปเบฒ, เปเบเบฑเบเปเบเบฑเบเปเบซเบกเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบฅเบฐเบชเบปเปเบเบเปเป, เปเบฅเบฐเบเปเบฒเบเบปเบงเปเบเบเบฐเบเบทเบเบเบฑเบเบเบธเบ. เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบเบฒเบเบชเบปเปเบเบเบทเบเบเปเปเบกเบนเบเปเบเบซเบฒเบเบฑเปเบเปเบเบดเบ, เปเบฅเบฐเบเบตเปเปเบกเปเบเบเบปเบงเบเบตเปเบเบญเบเบงเปเบฒเบเปเบญเบเบขเปเบฝเบกเปเบเบฑเบก. เปเบเบเบเบปเบเบเบฐเบเบดเบเบฑเปเบเปเบเบดเบเบเบฐเบเบฐเบเบฒเบเบฒเบกเบชเบปเปเบเบเปเปเบกเบนเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเบซเบผเบฑเบเบเบฒเบเปเบงเบฅเบฒเปเบเบซเบเบถเปเบ. เปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเปเบเปเบเบดเบ, เบเบนเปเบชเบปเปเบเบญเบฒเบเบเบฐเบเบฑเบเบเบงเบฒเบเบเปเปเบกเบนเบ (เปเบเบเบเบตเปเบเบฐเบชเบปเปเบเบเบฑเบเบเบต) เบซเบผเบทเบกเบตเบเบปเบเปเบเบเบฒเบ synchronization (เปเบเบฑเปเบ Semalt เบซเบผเบทเบเบธเบ) เบเบตเปเบเบฐเบเปเบงเบเปเบซเปเบเบฑเปเบเปเบเบดเบเปเบเบซเบฒเบซเบเปเบฒเบเบตเปเบชเบปเปเบเบเบฝเบเปเบเปเปเบกเบทเปเบญเบเปเบญเบเบขเปเบฝเบกเบซเบงเปเบฒเบเปเบเบปเปเบฒ. .
- เปเบเปโเบฎเบฑเบโเบเบฒเบโเบขเบทเบโเบขเบฑเบโ. เปเบเปเบเบฃเปเบเบเป, เบชเบณเบฅเบฑเบเปเบเบฑเบเปเบเบฑเบเบเบตเปเบกเบตเปเบฅเบเบฅเบณเบเบฑเบ N, เบเบฒเบเบฎเบฑเบเบฎเบนเปเบเบปเปเบงเปเบเปเบกเปเบเบญเบญเบเปเบเบเบเบตเปเบเบญเบเบงเปเบฒเปเบเบฑเบเปเบเบฑเบเบเบฑเบเปเบปเบเบเบตเปเบกเบตเปเบฅเบเบฅเบณเบเบฑเบเบเปเบญเบเปเปเบฒ N เปเบกเปเบเปเบเปเบฎเบฑเบเบชเบณเปเบฅเบฑเบเปเบฅเปเบง.
- เปเบฅเบเบฐเบฅเปเบเปเบฒเปเบเปเปเบปเบเบญเบฒเบเบธเปเบฅเปเบง. เปเบเบทเปเบญเบเปเบฒเบเบปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบเบเบญเบเบเบฒเบเบชเบนเบเปเบชเบเปเบฅเบฐเบเบฒเบเบเบฑเบเบเปเบฒเบเบญเบเบเบญเบเปเบฅเบฐเปเบเบฎเบฑเบเปเบเบดเบ, เปเบเปเบเบเบญเบเปเบเปเปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒ. เบเปเบฒเบเปเบงเบเปเบงเบฅเบฒเปเบปเบเปเบงเบฅเบฒเปเบปเบเปเบงเบฅเบฒ, เบเปเบฒเบเบชเบปเปเบเบเบฐเบชเบปเปเบเปเบเบฑเบเปเบเบฑเบเบเบตเปเบเปเปเปเบเปเบฎเบฑเบเบฎเบนเปเบเบฑเบเปเบปเบเบเบตเปเบเบทเบเบชเบปเปเบเบเบทเบ.
เบเบฒเบเบเปเบฒเบเบซเปเบญเบเบเบตเปเปเบฅเบทเบญเบ
เปเบกเบทเปเบญเบเบฐเบซเบเบฒเบเบเบญเบเบเปเบญเบเบขเปเบฝเบกเปเบฅเบฐเบเบฐเบฅเบดเบเบเบฐเบเบฑเบเบเบฒเบเบเบฑเบเบเปเบฒเบเบฒเบเบเบฐเบซเบเบฒเบเบเบฑเบเบเปเบงเบเบเบฐเบซเบเบฒเบเปเบซเบเป, เบเปเบฒเบเบงเบเปเบเบฑเบเปเบเบฑเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบเบญเบฒเบเบเบฐเบขเบนเปเปเบเบเปเป. เปเบเบเปเบฅเบฐเบเบตเบเบฑเปเบเบเปเบฒเบง, เบเปเปเบเบดเบเบเบฒเบเบเบญเบเปเบเบฑเบเปเบเบฑเบเบเบฝเบงเบญเบฒเบเบเบฐเปเบฎเบฑเบเปเบซเปเบเปเบฒเบเบงเบเปเบเบฑเบเปเบเบฑเบเบเบทเบเบชเบปเปเบเบเบทเบเปเบซเบกเป, เปเบเบดเปเบเบชเปเบงเบเปเบซเบเปเปเบกเปเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบ.
เบเบปเบงเบขเปเบฒเบ:
เบเบตโเบเบตเปโเบชเบธเบ
Server
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)
}
}
เบชเบฐเบซเบฅเบธเบ
เบเบปเบเปเบเปเบเบทเปเบญเบฎเบฑเบเบเบฐเบเบฑเบเบเบฒเบเปเบญเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเปเบเบทเปเบญเบเบทเปเบเป
เบเบปเบเปเบ
เบเปเบฒโเบฎเปเบญเบโเบชเบฐโเบซเบกเบฑเบโ, เบเปเบฒโเปเบซเบฑเบโ
เบเบงเบเบชเบญเบเบฅเบงเบก
เปเบเปเปเบเบทเปเบญเบเบงเบเบซเบฒเบเปเปเบเบดเบเบเบฒเบเปเบฅเบฑเบเบเปเบญเบเปเบเปเบเบฑเบเปเบเบฑเบเบเบตเปเบชเบปเปเบเบเปเบฒเบ
เบเบฑเบเปเบงเบฅเบฒ
เบเบฑเบเบฅเบปเบเปเบฅเบเบฐเปเบปเบเปเบงเบฅเบฒ เปเบฅเบฐเบเบตเปเบเบญเบเปเบงเบฅเบฒเบเบตเปเบกเบฑเบเปเบปเบเบญเบฒเบเบธ. เบญเบฑเบเบชเบธเบเบเปเบฒเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเบกเบตเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบชเบนเบ, เปเบเบฑเบเปเบเบฑเบเบซเบผเบทเปเบเบฎเบฑเบเปเบเบดเบเบเบญเบเบกเบฑเบเบชเบนเบเปเบชเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบชเบปเปเบ. เบเปเบฒเปเบเบฑเบเปเบเบฑเบเบเบทเบเบเบฑเบเบชเบปเปเบเบเปเบงเบเบเบงเบฒเบกเบฅเปเบฒเบเปเบฒ, เปเบเปเบเปเปเปเบเปเปเบชเบ (เปเบปเบเปเบงเบฅเบฒเบเปเบญเบเปเบงเบญเบฑเบเบเบงเบเบเบญเบเบเปเบงเบเปเบงเบฅเบฒเปเบปเบเปเบงเบฅเบฒ), เบซเบผเบทเปเบเบฎเบฑเบเปเบเบดเบเบซเบฒเบเปเบ, เบเบฒเบเบชเบปเปเบเบเปเปเบเบฐเบเบฒเปเบซเปเปเบเบฑเบเปเบเบฑเบเบเปเปเบฒเบเบฑเบเบขเบนเปเบเปเบฒเบเบเบฒเบเบฎเบฑเบ.
ialเบฒเบเปเบฅเบเบเบตเบฃเบฝเบง
เปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบฅเบฝเบเบเบฒเบกเบฅเปเบฒเบเบฑเบเบเบญเบเบเบธเบเบเปเปเบกเบนเบเบเบตเปเบเบทเบเบชเบปเปเบเบเบฒเบเบเบนเปเบชเบปเปเบเปเบเบซเบฒเบเบนเปเบฎเบฑเบ. เบเปเบญเบเบซเบงเปเบฒเบเปเบเบเบปเบงเปเบฅเบเบฅเปเบฒเบเบฑเบเบเบญเบเปเบเบฑเบเปเบเบฑเบเบเบตเปเปเบเปเบฎเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบนเปเบฎเบฑเบเบชเบฒเบกเบฒเบเบเบงเบเบเบปเบเบเบฒเบเบชเบนเบเปเบชเบเปเบเบฑเบเปเบเบฑเบ. เปเบฅเบเบฅเบณเบเบฑเบเปเบเบฑเบเปเบเบฑเบเบเบฝเบงเบเบฑเบเปเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบเบฑเบเปเบเบฑเบเบเบฑเปเบเบเปเปเบฒเบเบฑเบ
เบเบฒเบเบขเบทเบเบขเบฑเบ
เบชเปเบฒเบเบเบถเปเบเปเบเบเบเบธเบเบฎเบฑเบ เปเบฅเบฐเบเบตเปเปเบซเปเปเบซเบฑเบเปเบเบดเบเบเบธเบเบชเบปเปเบเบเบตเปเปเบเบฑเบเปเบเบฑเบเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบ เบซเบผเบทเบเบธเปเบกเบเบญเบเปเบเบฑเบเปเบเบฑเบเปเบเปเบฎเบฑเบเบชเบณเปเบฅเบฑเบเปเบฅเปเบง. เปเบเบเบเบปเบเบเบฐเบเบดเบเบฒเบเบฎเบฑเบเบฎเบนเปเบเบฐเบเบญเบเบกเบตเบเบปเบงเปเบฅเบเบฅเปเบฒเบเบฑเบเบเบญเบเบเบธเบเบเบตเปเปเบเปเบฎเบฑเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ. เบญเบตเบเบเบฒเบกเบเบดเบเบตเบเบฒเบ, เบเบฒเบเบขเบทเบเบขเบฑเบเบเบญเบเบเบธเบเบเบปเบ เปเบฅเบฐเบเบธเปเบกเปเบกเปเบเบเปเบฒเปเบเบเปเบเป
เบเบฒเบเบขเบทเบเบขเบฑเบเบเบฒเบเบฅเบปเบ
เปเบเปเปเบเบเบเบนเปเบฎเบฑเบเปเบเบทเปเบญเปเบเปเบเปเบซเปเบเบนเปเบชเบปเปเบเบฎเบนเปเบงเปเบฒเปเบเบฑเบเปเบเบฑเบเปเบเปเบฎเบฑเบเบเปเปเบเบทเบเบเปเบญเบ. เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบงเบเบฒเบเบฎเบฑเบเบฎเบนเปเบเบฒเบเบฅเบปเบเบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบงเบเบเบธเบเบเบญเบเบเบธเบเบเบตเปเบเปเปเปเบเปเบฎเบฑเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ
เบเปเบญเบเบขเปเบฝเบก, conveyorization
เบเปเบฒโเบเบฑเบโเบฅเบฐโเบเบฑเบโเบเบญเบโเบเบปเบงโเปเบฅเบโเบฅเปเบฒโเบเบฑเบโเบเบตเปโเบชเบฒโเบกเบฒเบโเบเปเบฒโเปเบเปโเปเบเบทเปเบญโเบชเบปเปเบโเบเบญเบโเปเบเปโ. Multicast เปเบฅเบฐ handshake เบชเบฒเบกเบฒเบเปเบเบตเปเบกเบเบฒเบเบชเบปเปเบเบเปเบฒเบเปเบเปเบเบเบญเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบเปเบกเบทเปเบญเบเบฝเบเบเบฑเบเบเบฒเบเบฅเปเบเปเบฒเบเบฒเบเบฎเบฑเบเบฎเบนเป. เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบซเบฑเบ, เบเบฐเบซเบเบฒเบเบเปเบญเบเบขเปเบฝเบกเบชเบฒเบกเบฒเบเบเบทเบเบเบดเบเปเบฅเปเปเบเบเบญเบตเบเปเบชเปเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบฎเบฑเบเปเบฅเบฐ buffering เบเบญเบเบเบธเบเบฎเบฑเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบฅเบฐเบเบฑเบเบเบฒเบเปเบซเบผเบเปเบเบทเบญเบเปเบฒเบ.
เบเบปเบงเบขเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเบญเบเบเบฒเบเปเบเป Go เบชเปเบฒเบฅเบฑเบเปเบเบทเบญเบเปเบฒเบ
ะ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com