使用 Golang 构建服务器但在客户端有问题

这是我的代码:


package main


import (

        "fmt"

        "net"

        "net/http"

        "os"

)


const RECV_BUF_LEN = 1024


func handler(w http.ResponseWriter, r *http.Request) {

        fmt.Fprint(w, "Test")

}


func main() {

        http.HandleFunc("/", handler)

        s := &http.Server{Addr: ":8080", Handler: nil}

        listener, err := net.Listen("tcp", s.Addr)

        if err != nil {

                fmt.Println("Error: ", err.Error())

                fmt.Println("Close Server")

                os.Exit(1)

        }


        for {

                conn, err := l.Accept()

                if err != nil {

                        fmt.Println("Error: ", err.Error())

                        continue

                }

                go ClientLogic(conn)

        }

}


func ClientLogic(conn net.Conn) {

        fmt.Println("Connect Successful")

        conn.Close()

}

我知道我可以使用以下代码来构建服务器,但我想做一些事情,例如打印一些数据。


http.HandleFunc("/", handler)

http.ListenAndServe(":8080", nil)

当代码运行时,服务器端可以成功打印“连接成功”。


但是,它不会在客户端显示任何内容。


换句话说,客户端的浏览器显示任何内容并继续加载,但服务器端可以显示连接成功的消息。


PS:代码参考http://lolikitty.pixnet.net/blog/post/148420590和golang的源码(http://golang.org/src/pkg/net/http/server.go?s=50405 :50451#L1684 )


慕娘9325324
浏览 147回答 2
2回答

哈士奇WWW

您应该使用处理程序或接受,但如果您使用接受,这将被处理新连接,而您将忽略处理程序。您将进入 http 连接的较低抽象级别。这段代码按您的预期工作:package mainimport (    "fmt"    "net/http")func handler(w http.ResponseWriter, r *http.Request) {    fmt.Fprint(w, "Test")    fmt.Println("Connect Successful")}func main() {    http.HandleFunc("/", handler)    http.ListenAndServe(":8080", nil)}当您调用ListenAndServe 时,他会做出正确的 Accept ,因此您无需担心。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go