| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package uhf
- import (
- "errors"
- "net"
- "time"
- )
- type TCPReader struct {
- IP string
- Port int
- conn net.Conn
- isConnected bool
- readBufSize int // 读取缓冲区大小
- }
- // 初始化时设置默认缓冲区
- 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()
- }
|