Sockets 服务器套接字编程-读取HTTP头
我正试图在Go for school中编写一个HTTP服务器。我需要避免使用任何使这项任务变得容易的库(例如net/http) 我的问题是,我似乎无法正确显示HTTP响应头。我想逐行将每个标题打印到终端 我已经用Java编写了这个程序,它工作得很好,但是,我希望它能与Go程序一起工作 我有一个名为“handleClient”的函数,它接受接受的套接字Sockets 服务器套接字编程-读取HTTP头,sockets,http,parsing,go,get,Sockets,Http,Parsing,Go,Get,我正试图在Go for school中编写一个HTTP服务器。我需要避免使用任何使这项任务变得容易的库(例如net/http) 我的问题是,我似乎无法正确显示HTTP响应头。我想逐行将每个标题打印到终端 我已经用Java编写了这个程序,它工作得很好,但是,我希望它能与Go程序一起工作 我有一个名为“handleClient”的函数,它接受接受的套接字 func handleClient(c net.Conn) { defer c.Close() req, _ := bufio.NewRe
func handleClient(c net.Conn) {
defer c.Close()
req, _ := bufio.NewReader(c).ReadString('\n')
fmt.Print(string(req))
当使用web浏览器连接到“localhost:8080”时,我的终端显示“GET/HTTP/1.1”,这是正确的,但是,我还需要发布额外的行。我知道“ReadString('\n')是阻止这种情况发生的原因,但是,这是我所知道的结束这一行的唯一方法
如何启动其他行?您可以在循环内调用,直到点击EOF
大概是这样的:
func handleClient(c net.Conn) {
defer c.Close()
r := bufio.NewReader(c)
for {
req, err := r.ReadString('\n')
if err != nil && err != io.EOF {
panic(err)
}
fmt.Println(req)
// break the loop if the err is eof
if err == io.EOF {
break
}
}
您可以在循环内调用,直到点击EOF
大概是这样的:
func handleClient(c net.Conn) {
defer c.Close()
r := bufio.NewReader(c)
for {
req, err := r.ReadString('\n')
if err != nil && err != io.EOF {
panic(err)
}
fmt.Println(req)
// break the loop if the err is eof
if err == io.EOF {
break
}
}
mkopriva为我指出了正确的方向,然而,EOF并不是打破循环的正确方法。当我遇到空白行时,我需要停止循环。从技术上讲,它从来不是EOF 为此,我已将if条件调整为以下条件以断开循环:
if len(req) <=2 {
如果len(req)mkopriva为我指出了正确的方向,那么EOF并不是打破循环的正确方法。当我遇到空白行时,我需要停止循环。从技术上讲,它从来不是EOF
为此,我已将if条件调整为以下条件以断开循环:
if len(req) <=2 {
如果len(req),您可以在循环内调用,直到点击EOF
。我想这样做,但ReadString似乎需要一个位作为分隔符。我不知道该怎么做。我一直在寻找其他的方法,但没有找到任何,我是一个新手。我一定错过了一些简单的东西。你可以在循环内调用,直到你点击EOF
。我想这样做,但ReadString似乎需要一个位作为分隔符。我不知道该怎么做。我一直在寻找其他的方法,但没有找到任何,我是一个新手。我一定错过了一些简单的东西。事实上,打破EOF不起作用,但我更进一步。目前正在研究解决方案。事实上,打破EOF不起作用,但我更进一步。目前正在研究解决方案。