go监听多个端口
时间: 2023-07-19 15:05:54 浏览: 63
在 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 执行完毕后立即退出。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)