package uhf import ( "errors" "net" "time" ) type TCPReader struct { IP string Port int conn net.Conn isConnected bool readBufSize int // 读取缓冲区大小 } func (t *TCPReader) CloseRelay1(validTime byte) error { //TODO implement me panic("implement me") } func (t *TCPReader) ReleaseRelay1() error { //TODO implement me panic("implement me") } func (t *TCPReader) CloseRelay2(validTime byte) error { //TODO implement me panic("implement me") } func (t *TCPReader) ReleaseRelay2() error { //TODO implement me panic("implement me") } // 初始化时设置默认缓冲区 func NewTCPReader(ip string, port int) *TCPReader { return &TCPReader{ IP: ip, Port: port, readBufSize: 1024, // 默认1K缓冲区 } } // Connect 建立TCP连接(原有逻辑不变) func (t *TCPReader) Connect() error { addr := net.JoinHostPort(t.IP, string(rune(t.Port))) conn, err := net.DialTimeout("tcp", addr, 5*time.Second) if err != nil { t.isConnected = false return err } t.conn = conn t.isConnected = true return nil } // Disconnect 断开连接(原有逻辑不变) func (t *TCPReader) Disconnect() error { if t.conn != nil { err := t.conn.Close() t.isConnected = false return err } return nil } // IsConnected 检查状态(原有逻辑不变) func (t *TCPReader) IsConnected() bool { return t.isConnected } // SendData 仅发送数据(多设备批量发送用) func (t *TCPReader) SendData(data []byte) error { if !t.isConnected { return errors.New("TCP连接未建立") } _, err := t.conn.Write(data) return err } // ReadData 阻塞读取TCP数据(多设备监听用) func (t *TCPReader) ReadData() ([]byte, error) { if !t.isConnected { return nil, errors.New("TCP连接未建立") } buf := make([]byte, t.readBufSize) n, err := t.conn.Read(buf) if err != nil { t.isConnected = false // 读失败标记为断开 return nil, err } return buf[:n], nil } // SendAndRecv 发送并等待响应(一问一答,多设备指令交互用) func (t *TCPReader) SendAndRecv(data []byte) ([]byte, error) { if err := t.SendData(data); err != nil { return nil, err } // 设置读超时,避免永久阻塞 t.conn.SetReadDeadline(time.Now().Add(3 * time.Second)) defer t.conn.SetReadDeadline(time.Time{}) // 恢复默认 return t.ReadData() }