Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 服务器套接字编程-读取HTTP头_Sockets_Http_Parsing_Go_Get - Fatal编程技术网

Sockets 服务器套接字编程-读取HTTP头

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

我正试图在Go for school中编写一个HTTP服务器。我需要避免使用任何使这项任务变得容易的库(例如net/http)

我的问题是,我似乎无法正确显示HTTP响应头。我想逐行将每个标题打印到终端

我已经用Java编写了这个程序,它工作得很好,但是,我希望它能与Go程序一起工作

我有一个名为“handleClient”的函数,它接受接受的套接字

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不起作用,但我更进一步。目前正在研究解决方案。