package main import ( "fmt" "log" "net" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } var tcpConn net.Conn func main() { // Connect to TCP server var err error tcpConn, err = net.Dial("tcp", "localhost:2222") // Replace with your TCP server address if err != nil { log.Fatal("Error connecting to TCP server:", err) } defer tcpConn.Close() // Set up WebSocket handler http.HandleFunc("/ws", handleWebSocket) // Start HTTP server fmt.Println("WebSocket server listening on :8000") log.Fatal(http.ListenAndServe(":8000", nil)) } func handleWebSocket(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("Error upgrading to WebSocket:", err) return } defer conn.Close() waitChannel := make(chan bool) // Read message from WebSocket go func() { defer func() { waitChannel <- true }() for { _, message, err := conn.ReadMessage() if err != nil { log.Println("Error reading WebSocket message:", err) return } _, err = tcpConn.Write(message) if err != nil { log.Println("Error sending message to TCP server:", err) return } } }() go func() { defer func() { waitChannel <- true }() for { buffer := make([]byte, 1024) n, err := tcpConn.Read(buffer) if err != nil { log.Println("Error reading from TCP server:", err) return } err = conn.WriteMessage(websocket.TextMessage, buffer[:n]) if err != nil { log.Println("Error writing WebSocket message:", err) return } } }() <-waitChannel log.Println("Connection closed") }