为什么在指定本地端口时客户端会挂起?

这与必须用 Java 提交的家庭作业有关。该程序按预期工作,将 server.go 的内容打印到终端。为什么客户端在两次或多次连续运行后挂起 30 秒?


延迟仅在指定客户端端口时发生(与分配相关)。


// server.go

package main


import (

    "log"

    "net/http"

)


func main() {

    log.Fatal(http.ListenAndServe(":8080", http.FileServer(http.Dir("."))))

}

如果不是 defer conn.Close() 并且客户端仅在前一个客户端返回后运行,我希望延迟是等待连接关闭的超时。


// client.go

package main


import (

    "fmt"

    "io"

    "log"

    "net"

    "os"

)


func main() {

    d := net.Dialer{

        LocalAddr: &net.TCPAddr{

            Port: 8081,

        },

    }


    // Dial the server from client port 8081 to server port 8080

    conn, err := d.Dial("tcp", ":8080")

    if err != nil {

        log.Fatal(err)

    }

    defer conn.Close()


    // Request the resource and log the response

    fmt.Fprint(conn, "GET /server.go HTTP/1.0\r\n\r\n")

    io.Copy(os.Stdout, conn)

}

延迟期间 netstat 的输出:


$ netstat -anp tcp | grep "8080\|8081"

tcp4       0      0  127.0.0.1.8081         127.0.0.1.8080         SYN_SENT   

tcp46      0      0  *.8080                 *.*                    LISTEN   


扬帆大鱼
浏览 168回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go