为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕娘9325324 2021-08-16 15:38:43
这是我的代码:package mainimport (        "fmt"        "net"        "net/http"        "os")const RECV_BUF_LEN = 1024func 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 )
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您应该使用处理程序或接受,但如果您使用接受,这将被处理新连接,而您将忽略处理程序。您将进入 http 连接的较低抽象级别。


这段代码按您的预期工作:


package main


import (

    "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 ,因此您无需担心。


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信