这个无限的for循环如何不崩溃?我想如果现在没有客户,请倾听。Accept() 方法抛出一个错误,使 if 条件为 true,并且 for 循环继续到另一个迭代,直到客户端连接到服务器。因此,我放入if语句,看看它是否像我猜测的那样工作。但事实并非如此。它没有打印“错误”,因此当没有客户端时,程序不会进入if语句。fmt.Println("Error")有人可以解释一下这个for循环是如何工作的吗?func main() { service := ":1202" tcpAddr, err := net.ResolveTCPAddr("tcp4", service) checkError(err) listener, err := net.ListenTCP("tcp4", tcpAddr) checkError(err) for { conn, err := listener.Accept() if err != nil { fmt.Println("Error") continue } } }
1 回答
ibeautiful
TA贡献1993条经验 获得超6个赞
这个无限循环是执行以下操作:
等待 返回,并显示新连接或错误。
listener.Accept()如果收到返回值,请检查错误。如果你有一个,记录它,或对它做任何事情,然后循环,以便服务器可以等待另一个新连接。
continue如果您没有错误,只需启动一个单独的go例程即可处理连接。这样,for 循环会立即再次运行,因此侦听器将等待新连接,而您在单独的例程中处理该连接。
请参阅示例:
func main() {
service := ":1202"
tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
checkError(err)
listener, err := net.ListenTCP("tcp4", tcpAddr)
checkError(err)
for {
conn, err := listener.Accept()
if err != nil {
log.Println("We've got an error:",err)
continue
}
go HandleConnection(conn)
}
}
添加回答
举报
0/150
提交
取消
