github.com/codingeasygo/util@v0.0.0-20231206062002-1ce2f004b7d9/tools/xecho/echo.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  	"net/http"
     7  	"os"
     8  
     9  	"golang.org/x/net/websocket"
    10  )
    11  
    12  type ll struct {
    13  	net.Listener
    14  }
    15  
    16  func (l *ll) Accept() (conn net.Conn, err error) {
    17  	conn, err = l.Listener.Accept()
    18  	if err == nil {
    19  		fmt.Printf("ACCEPT:%v\n", conn.RemoteAddr())
    20  	}
    21  	return
    22  }
    23  
    24  func main() {
    25  	http.Handle("/", websocket.Handler(func(ws *websocket.Conn) {
    26  		fmt.Printf("connection from %v is starting\n", ws.RemoteAddr())
    27  		buffer := make([]byte, 32*1024)
    28  		for {
    29  			n, err := ws.Read(buffer)
    30  			if err != nil {
    31  				break
    32  			}
    33  			fmt.Printf("RECV:%v\n", (buffer[0:n]))
    34  			_, err = ws.Write(buffer[0:n])
    35  			if err != nil {
    36  				break
    37  			}
    38  			// binary.BigEndian.PutUint32(buffer, 64)
    39  			// buffer[0] = 3
    40  			// _, err = ws.Write(buffer[:4])
    41  			// if err != nil {
    42  			// 	break
    43  			// }
    44  			// for i := 0; i < 6; i++ {
    45  			// 	time.Sleep(100 * time.Millisecond)
    46  			// 	copy(buffer, []byte("0123456789"))
    47  			// 	_, err = ws.Write(buffer[:10])
    48  			// 	if err != nil {
    49  			// 		break
    50  			// 	}
    51  			// }
    52  		}
    53  		fmt.Printf("connection from %v is done\n", ws.RemoteAddr())
    54  	}))
    55  	ln, err := net.Listen("tcp", os.Args[1])
    56  	if err != nil {
    57  		fmt.Println(err)
    58  		return
    59  	}
    60  	server := &http.Server{Addr: os.Args[1], Handler: http.DefaultServeMux}
    61  	fmt.Println(server.Serve(&ll{Listener: ln}))
    62  }