[golang]UDP端口池
好久没来csdn了,懒癌犯了,今天1024,水一篇文章吧,哈哈。
池子会保存 设置范围内 一定数量 的随机udp端口号,
get获取一个
put放回去一个
源码: “github.com/ailumiyana/tools/udp”
tools包里面还有一个延迟统计包和一个基于logrus的滚动日志
package main
import(
"github.com/ailumiyana/tools/udp"
"fmt"
"time"
"net"
"strconv"
)
func main() {
pool := udp.NewPool(100, 6000, 10000)
time.Sleep(10*time.Second)
fmt.Println("actives : ", pool.ActiveNums)
fmt.Println("Get:", pool.Get())
fmt.Println("Get:", pool.Get())
fmt.Println("Get:", pool.Get())
time.Sleep(1*time.Second)
fmt.Println("actives : ", pool.ActiveNums)
fmt.Println("Put:9999")
pool.Put(9999)
fmt.Println("actives : ", pool.ActiveNums)
addr, err := net.ResolveUDPAddr("udp", "0.0.0.0:" + strconv.Itoa(pool.Get()))
if err != nil {
fmt.Println(":",err)
return
}
_, err = net.ListenUDP("udp", addr)
if err != nil {
fmt.Println("unavailable addr")
return
}
fmt.Println("ListenUDP:", addr)
time.Sleep(60*time.Second)
}