Go 格式错误的HTTP状态代码“/&引用;围棋中的错误
Server.goGo 格式错误的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()
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)
}