Skip to content

Instantly share code, notes, and snippets.

@wisecsj
Created March 10, 2019 09:10
Show Gist options
  • Save wisecsj/368e62658bf38241ac1c7b2c61d7372c to your computer and use it in GitHub Desktop.
Save wisecsj/368e62658bf38241ac1c7b2c61d7372c to your computer and use it in GitHub Desktop.
server
package main
import (
"log"
"math/rand"
"net"
"strings"
"time"
)
func handleMsg(buf []byte) (seqNum, t string) {
s := strings.Fields(string(buf))
seqNum = s[1]
t = s[2]
return
}
// Server launch the server
func Server() {
addr, err := net.ResolveUDPAddr("udp", "localhost:8000")
if err != nil {
panic("地址转换出错")
}
s, err := net.ListenUDP("udp", addr)
defer s.Close()
if err != nil {
panic("创建套接字失败")
}
for {
// Generate random number in the range of 0 to 9(include)
randNum := rand.Intn(10)
buf := make([]byte, 1024)
_, cc, err := s.ReadFromUDP(buf)
if err != nil {
panic(err)
}
if randNum < 4 {
log.Printf("此udp包被丢弃...")
continue
}
go func(cc *net.UDPAddr) {
seqNum, t := handleMsg(buf)
log.Printf("addr:%s|seqNum:%s|sendTime:%s", cc.String(), seqNum, t)
// time.Sleep(time.Millisecond * time.Duration(rand.Intn(20)))
_, err := s.WriteToUDP([]byte("receive successfuly"), cc)
if err != nil {
panic(err)
}
}(cc)
}
}
func main() {
Server()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment