Go 格式错误的HTTP状态代码“/&引用;围棋中的错误

Go 格式错误的HTTP状态代码“/&引用;围棋中的错误,go,Go,Server.go package main import ( "fmt" "net/http" //"strings" "encoding/json" "io/ioutil" "strconv" "net" "bufio" ) type Message struct { Text string } func Unmarshal(data []byte, v interface{}) error func main()

Server.go

package main

import (
    "fmt"
    "net/http"
    //"strings"
   "encoding/json"
   "io/ioutil"
   "strconv"
    "net"
    "bufio"
)

type Message struct {
    Text string
}

func Unmarshal(data []byte, v interface{}) error


func main() {

    //http.HandleFunc("/", handler)
    server,_ := net.Listen("tcp", ":" + strconv.Itoa(8080))
    if server == nil {
        panic("couldn't start listening: ")
    }
    conns := clientConns(server)
    for {
        go handleConn(<-conns)
    }

}


func clientConns(listener net.Listener) chan net.Conn {
    ch := make(chan net.Conn)
    i := 0
    go func() {
        for {
            client, _ := listener.Accept()
            if client == nil {
                fmt.Printf("couldn't accept: ")
                continue
            }
            i++
            fmt.Printf("%d: %v <-> %v\n", i, client.LocalAddr(), client.RemoteAddr())
            ch <- client
        }
    }()
    return ch
}


func handleConn(client net.Conn) {
    b := bufio.NewReader(client)
    fmt.Println("Buffer")
    for {
        line, err := b.ReadBytes('\n')
        if err != nil { // EOF, or worse
            break
        }
        client.Write(line)
    }
}
运行client.go时出现的错误是:

Error while post: %vmalformed HTTP status code "/"

尽管服务器为每个post注册了一个通道,但它显示了格式错误的HTTP状态代码。是因为我听错了频道吗?我不明白为什么会发生这种错误

服务器代码中的这一行:

client.Write(line)

将请求行发送回客户端。由于客户端正在发布类似于
GET/HTTP/1.1
的内容,这意味着服务器正在响应类似于
GET/HTTP/1.1
的内容,而不是类似于
HTTP/1.1200 OK
的内容。您看到的错误消息是因为
/
出现在状态代码位置。

在server.go中,您似乎试图从TCP套接字级别上编写自己的HTTP服务器。这是不必要的工作-走简单的路线,使用内置的HTTP服务器API

此类服务器的总体轮廓如下所示:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

并进一步描述。更多文档位于。

如何更改服务器响应?行
client.Write(行)
是服务器响应客户端的地方<代码>行是响应。您可以通过将
(来自请求)替换为类似
“HTTP/1.1 200 OK”
的内容来更改它。
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}