diff --git a/main.go b/main.go
index c6319f4..ab35fa6 100644
--- a/main.go
+++ b/main.go
@@ -4,6 +4,7 @@ import (
 	"github.com/robfig/cron"
 	"log"
 	"os"
+	"net"
 )
 
 var err error
@@ -20,7 +21,23 @@ func main() {
 	c.AddFunc("0, 0, *, *, *, *", get_weather)
 	c.Start()
 
-	select {}
+	listener, err := net.Listen("tcp", "0.0.0.0:10090")
+    if err != nil {
+        log.Printf("listen fail, err: %v\n", err)
+        return
+    }
+ 
+    for {
+        conn, err := listener.Accept()
+        if err != nil {
+            log.Printf("accept fail, err: %v\n", err)
+            continue
+        }
+ //       go process(conn)
+	go handleConn(conn)   
+ }
+
+//	select {}
 
 }
 
diff --git a/mq.go b/mq.go
new file mode 100644
index 0000000..1110061
--- /dev/null
+++ b/mq.go
@@ -0,0 +1,3 @@
+package main
+
+
diff --git a/tcpserver.go b/tcpserver.go
new file mode 100644
index 0000000..c0f275e
--- /dev/null
+++ b/tcpserver.go
@@ -0,0 +1,97 @@
+package main
+
+import (
+	"log"
+	"net"
+	//"os"
+	// "strconv"
+	// "log"
+	//"strings"
+	"time"
+	// "go-study/socket/config"
+)
+
+
+func handleConn(conn net.Conn) {
+	defer conn.Close()
+
+	readChan := make(chan []byte)
+	//writeChan := make(chan string)
+	stopChan := make(chan bool)
+
+	go readConn(conn, readChan, stopChan)
+	// go writeConn(conn, writeChan, stopChan)
+
+	for {
+		select {
+		case readStr := <-readChan:
+			//log.Println("readStr:",readStr)
+			//upper := strings.ToUpper(readStr)
+			//writeChan <- upper
+			go yunhorn_ys_l_v1(readStr)
+		case stop := <-stopChan:
+			if stop {
+				break
+			}
+		}
+	}
+}
+func readConn(conn net.Conn, readChan chan<- []byte, stopChan chan<- bool) {
+	data_buf := make(chan []byte)
+	Rdata := make([]byte, 0)
+	data := make([]byte, 256)
+
+	go func() {
+		for {
+			select {
+			case kkdata := <-data_buf: //如果有数据,下面打印。但是有可能ch一直没数据
+				Rdata = append(Rdata, kkdata...)
+				//log.Println("kkdata:",kkdata)
+			case <-time.After(50 * time.Millisecond): //上面的ch如果一直没数据会阻塞,那么select也会检测其他case条件,检测到后3秒超时
+				// log.Println("超时")
+				if len(Rdata) >3{
+					readChan <- Rdata
+				Rdata = make([]byte,0)
+				}
+				//strData := string(Rdata)
+				//Rdata = make([]byte,0)
+				//log.Println("Received:", strData)
+				
+				//readChan <- Rdata
+				//Rdata = make([]byte,0)
+			}
+		}
+	}()
+
+	for {
+		// data := make([]byte, config.SERVER_RECV_LEN)
+		//data2 := make([]byte,256)
+		_, err := conn.Read(data)
+		if err != nil {
+			log.Println(err)
+			break
+		}
+		log.Println(DEVICEDATAS)
+
+		log.Println("read.data:",Bytes2Bits(data[3:4]))
+
+		data_buf <- data
+	}
+
+	stopChan <- true
+}
+
+func writeConn(conn net.Conn, writeChan <-chan string, stopChan chan<- bool) {
+	for {
+		strData := <-writeChan
+		_, err := conn.Write([]byte(strData))
+		if err != nil {
+			log.Println(err)
+			break
+		}
+
+		log.Println("Send:", strData)
+	}
+
+	stopChan <- true
+}