Feat: 代码提交

This commit is contained in:
2026-03-30 22:05:57 +08:00
parent b2031452c4
commit 6ea70691c9
21 changed files with 3168 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
package server
import (
"bufio"
"computer-network/logger"
"fmt"
"net"
"time"
)
type Handler struct {
rootDir string
}
func NewHandler(rootDir string) *Handler {
return &Handler{
rootDir: rootDir,
}
}
func (h *Handler) HandleConnection(conn net.Conn) {
defer conn.Close()
startTime := time.Now()
clientIP := logger.GetClientIP(conn)
reader := bufio.NewReader(conn)
req, err := ParseRequest(reader)
if err != nil {
response := BuildErrorResponse(StatusBadRequest, "", h.rootDir)
SendResponse(conn, response)
duration := time.Since(startTime)
logger.Log(clientIP, "-", "-", "-", 400, duration)
return
}
var statusCode int
var response *Response
if !req.IsGET() {
statusCode = 501
response = BuildErrorResponse(StatusNotImplemented, "/501.html", h.rootDir)
} else {
path := req.GetPath()
data, contentType, err := ReadFile(h.rootDir, path)
if err != nil {
statusCode = 404
response = BuildErrorResponse(StatusNotFound, "/404.html", h.rootDir)
} else {
statusCode = 200
response = BuildOKResponse(data, contentType)
}
}
err = SendResponse(conn, response)
if err != nil {
fmt.Printf("Error sending response to %s: %v\n", clientIP, err)
}
duration := time.Since(startTime)
logger.Log(clientIP, req.Method, req.URL, req.HTTPVersion, statusCode, duration)
}