ABNF描述的HTTP協議
GO實現一個簡單的HTTP服務器
package main
import (
"fmt"
"net"
)
func main() {
ln, err := net.Listen("tcp", "127.0.0.1:9991")
if err != nil {
fmt.Println("net.Listen err:", err)
return
}
defer ln.Close()
for {
conn, err := ln.Accept()
if err != nil {
fmt.Println("ln.Accept err:", err)
return
}
go handleConn(conn)
}
}
func handleConn(conn net.Conn) {
messageBody := "hello world"
httpContent := "HTTP/1.1 200 OK \r\n"
httpContent += "Set-Cookie: a=yuanzhen\r\n"
httpContent += "Set-Cookie: b=hhh\r\n"
httpContent += fmt.Sprintf("Content-Length: %d\r\n", len(messageBody))
httpContent += "\r\n" + messageBody
//創建消息緩衝區
buffer := make([]byte, 4096)
for {
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("conn.Read err:", err)
return
}
// 打印客戶端消息
clientMsg := string(buffer[0:n])
fmt.Println("收到消息:addr=>", conn.RemoteAddr(), ",content=>", clientMsg)
// 回覆客戶端消息
_, err = conn.Write([]byte(httpContent))
if err != nil {
fmt.Println("conn.Write err:", err)
}
break
}
conn.Close()
fmt.Println("客戶端斷開連接")
}