Golang 如何监听某一范围内的端口. 比如我想启动一个TCP服务,监听的端口要在 20000-30000 之间随机获取。
mux := http.NewServeMux()
port := 20000
server := &http.Server{
Handler: mux,
}
// 防止2万到3万端口中随机选择了不可用端口会出错,所以这里用到了错误检查。
// 因为GO反人类的错误处理,不像try catch或try except写起来那么优雅
// 这里因为采用的端口是随机的,所以最后必须显示给你目前使用的端口号
// 如 used port num is::21163 -> fail 说明本次选择这个21163是不可用的
// 此时程序会自动获取下一个2到3万之间的端口号,直到可用(number 后面没有 -> fail)为止
for {
seed := rand.New(rand.NewSource(time.Now().UnixNano()))
randNum := seed.Intn(10000)
port += randNum
server.Addr = ":" + strconv.Itoa(port)
fmt.Printf("used port num is:%s", server.Addr)
func(){
defer func() {
if ok := recover(); ok != nil{
fmt.Printf(" -> %s\n", "fail")
port = 20000
}
}()
err := server.ListenAndServe()
if err != nil {
panic("unavailable")
}
}()
}
7 回答5.6k 阅读
6 回答7.1k 阅读✓ 已解决
4 回答2.5k 阅读
2 回答1.1k 阅读✓ 已解决
1 回答2.3k 阅读
2 回答1.1k 阅读
1 回答1.1k 阅读
创建一万个routine ,每个routine 监听一个端口