亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個無限 for 循環在 TCP 連接中是如何工作的?

這個無限 for 循環在 TCP 連接中是如何工作的?

慕的地8271018 2022-09-19 14:58:39
這個無限的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個贊

這個無限循環是執行以下操作:

  1. 等待 返回,并顯示新連接或錯誤。listener.Accept()

  2. 如果收到返回值,請檢查錯誤。如果你有一個,記錄它,或對它做任何事情,然后循環,以便服務器可以等待另一個新連接。continue

  3. 如果您沒有錯誤,只需啟動一個單獨的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)

    }


查看完整回答
反對 回復 2022-09-19
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號