Golang 如何随机监听某一范围内的端口

Golang 如何监听某一范围内的端口. 比如我想启动一个TCP服务,监听的端口要在 20000-30000 之间随机获取。

阅读 9.9k
3 个回答

创建一万个routine ,每个routine 监听一个端口

我想问问其他语言是怎么实现的?

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")
            }
        }()
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题