这与必须用 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
相关分类