GO語言使用原生的HTTP協議實現簡單的HTTP服務器

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("客戶端斷開連接")
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章