package main import ( "crypto/tls" "fmt" "log" "net" "net/http" "test-proxy-go/common" "github.com/gorilla/websocket" ) const ( tcpAddress = "172.20.0.1:1080" ) var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // 允许来自任何来源的连接 }, } func wsHandler(w http.ResponseWriter, r *http.Request) { fmt.Println("有新的客户端连接了") conn, err := upgrader.Upgrade(w, r, nil) if err != nil { fmt.Println("websocket连接失败:", err) return } remoteConn, err := net.Dial("tcp", tcpAddress) if err != nil { log.Printf("本地服务连接失败 %s: %v", tcpAddress, err) return } fmt.Println("本地服务启动成功", tcpAddress) go common.WsToTcpHandler(remoteConn, conn) go common.TcpToWsHandler(remoteConn, conn) } // HTTP GET 接口,返回 "Hello, World!" func helloHandler(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) // 设置状态码为 200 OK w.Header().Set("Content-Type", "text/plain") // 设置响应内容类型 _, err := w.Write([]byte("Hello, World!")) if err != nil { log.Println("Write failed:", err) } } func main() { server := &http.Server{ Addr: ":8080", TLSConfig: &tls.Config{ InsecureSkipVerify: true, // 可选 }, } http.HandleFunc("/ws", wsHandler) http.HandleFunc("/hello", helloHandler) fmt.Println("WebSocket服务已启动,地址:ws://localhost:8080/ws") if err := server.ListenAndServe(); err != nil { log.Fatalf("Server failed: %s", err) } }