go监听随机端口

func Start_Random() (int, error) {
    //监听随机端口
    l, err := net.Listen("tcp", "0.0.0.0:0")
    if err != nil {
        beego.Error("CAN'T LISTEN: ", err)
        return 0, err
    }
 
    port := l.Addr().(*net.TCPAddr).Port
    beego.Debug("Listen On Port:", port)
    go func() {
        for {
            conn, err := l.Accept() //循环接受客户端和设备的连接请求
            if err != nil {
                beego.Error("Can't Accept: ", err)
                return
            }
            go onRandomConnect(conn, l) //
        }
 
    }()
    return port, nil
 
}
在 Go 中,可以使用 `net.Listen()` 来监听一个端口。如果要监听多个端口,可以使用 Goroutine 并发监听多个端口。以下是一个示例代码: ```go package main import ( "fmt" "net" ) func main() { ports := []string{"8000", "9000", "10000"} for _, port := range ports { go func(port string) { listener, err := net.Listen("tcp", ":"+port) if err != nil { fmt.Printf("Failed to listen on port %s: %v\n", port, err) return } defer listener.Close() fmt.Printf("Listening on port %s...\n", port) for { conn, err := listener.Accept() if err != nil { fmt.Printf("Failed to accept connection on port %s: %v\n", port, err) continue } fmt.Printf("Accepted connection on port %s\n", port) // Handle the connection } }(port) } // Wait forever select {} } ``` 在上面的代码中,我们定义了一个 `ports` 数组,其中包含要监听端口号。然后,我们使用 `for` 循环并发监听每个端口,对于每个端口,我们都创建一个 Goroutine。 在每个 Goroutine 中,我们使用 `net.Listen()` 监听端口。如果监听失败,我们打印错误信息并返回。如果监听成功,我们打印一个消息表示正在监听端口。 然后,我们使用 `listener.Accept()` 接受连接。如果接受失败,我们打印错误信息并继续等待下一个连接。如果接受成功,我们打印一个消息表示已接受连接,并处理该连接。 最后,我们使用 `select {}` 让程序永远等待。这是因为在上面的代码中,我们使用了 Goroutine 并发监听多个端口,如果不使用 `select {}` 让程序永远等待,程序会在所有 Goroutine 执行完毕后立即退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值