这个无限循环如何在 TCP 连接中工作?
How this infinite for loop works in TCP connection?
这个无限循环怎么不崩溃?
我想如果现在没有客户端,listener.Accept() 方法会抛出一个错误,使 if 条件为真并且 for 循环继续进行另一次迭代,直到客户端连接到服务器。因此,我将 fmt.Println("Error")
放在 if 语句中,看看它是否像我猜的那样工作。但事实并非如此。它没有打印“错误”,因此程序在没有客户端时不会进入 if 语句。
谁能解释一下这个 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
}
}
}
这个无限循环执行以下操作:
等待 listener.Accept()
到 return 新连接或错误。
如果得到 return 值,请检查错误。如果你有一个,记录它,或者用它做任何事情,然后 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)
}
}
这个无限循环怎么不崩溃?
我想如果现在没有客户端,listener.Accept() 方法会抛出一个错误,使 if 条件为真并且 for 循环继续进行另一次迭代,直到客户端连接到服务器。因此,我将 fmt.Println("Error")
放在 if 语句中,看看它是否像我猜的那样工作。但事实并非如此。它没有打印“错误”,因此程序在没有客户端时不会进入 if 语句。
谁能解释一下这个 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
}
}
}
这个无限循环执行以下操作:
等待
listener.Accept()
到 return 新连接或错误。如果得到 return 值,请检查错误。如果你有一个,记录它,或者用它做任何事情,然后
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)
}
}