这个无限 for 循环在 TCP 连接中是如何工作的?

这个无限的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

            }

            

            

        }

    } 


慕的地8271018
浏览 210回答 1
1回答

ibeautiful

这个无限循环是执行以下操作:等待 返回,并显示新连接或错误。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)    }} 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java