package controllers import ( "bufio" "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/globals" beego "github.com/astaxie/beego/server/web" "io" "net" ) type PrintController struct { beego.Controller } type CallBackPrint struct { Data string `json:"data"` Code string `json:"code"` } func (c *PrintController) Msg() { //if c.Ctx.Input.Method() == http.MethodPost { l, err := net.Listen("tcp", "print.jxcs.net:8000") if err != nil { fmt.Println("listen error:", err) return } for { c, err := l.Accept() if err != nil { fmt.Println("accept error:", err) break } globals.SugarLogger.Debugf("tcp socket:", utils.Format4Output(c, true)) go handleConn(c) } callBackPrint := &CallBackPrint{} globals.SugarLogger.Debugf("print callback callbackResponse:%s", utils.Format4Output(c.Ctx.Request, true)) c.Data["json"] = callBackPrint c.ServeJSON() //} else { // c.Abort("404") //} } func handleConn(c net.Conn) { if c == nil { fmt.Println("conn is nil") return } defer c.Close() reader := bufio.NewReader(c) for { //ReadString阻塞,直到读到\n msg, err := reader.ReadString('\n') if err != nil { if err == io.EOF { fmt.Println("connection close") } else { fmt.Println("ReadString err", err) } return } fmt.Println("read data:", msg) b := []byte("ok") c.Write(b) } }