gpt4 book ai didi

web - 使用 Golang 构建服务器但在客户端出现问题

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:32 24 4
gpt4 key购买 nike

这是我的代码:

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)

代码运行时,服务端可以成功打印“Connect Successful”。

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

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

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

最佳答案

我不确定您要实现的目标,但该代码存在一些主要问题。

  1. http.HandleFunc("/", handler)DefaultServeMux.HandleFunc(pattern, handler) 的别名,但由于您的代码没有无论如何涉及DefaultServeMux甚至http.Server,都是没用的。

  2. (不是很相关但是)你检查来自 Accept() 的错误然后继续,但是来自 accept 的任何错误几乎都是致命的并且你无法从中恢复大部分时间。

  3. func ClientLogic(conn net.Conn) 立即关闭连接而不对其进行任何操作,您期望发生什么?

如果出于某种原因你只想访问原始连接,你总是可以实现类似 this 的东西:

http.HandleFunc("/hijack", func(w http.ResponseWriter, r *http.Request) {
hj, ok := w.(http.Hijacker)
if !ok {
http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError)
return
}
conn, bufrw, err := hj.Hijack()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// Don't forget to close the connection:
defer conn.Close()
bufrw.WriteString("Now we're speaking raw TCP. Say hi: ")
bufrw.Flush()
s, err := bufrw.ReadString('\n')
if err != nil {
log.Printf("error reading string: %v", err)
return
}
fmt.Fprintf(bufrw, "You said: %q\nBye.\n", s)
bufrw.Flush()
})
http.ListenAndServe(":8080", nil)

关于web - 使用 Golang 构建服务器但在客户端出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com