diff --git a/src/framework/utils/telnet/telnet.go b/src/framework/utils/telnet/telnet.go index ad2c6b48..fb3c5c4b 100644 --- a/src/framework/utils/telnet/telnet.go +++ b/src/framework/utils/telnet/telnet.go @@ -42,6 +42,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { return nil, err } + // 需要确保接收方理解并正确处理发送窗口大小设置命令 + client.Write([]byte{255, 251, 31}) // 发送窗口大小选项 + client.Write([]byte{255, 250, 31, 0, 128, 0, 120, 255, 240}) // 发送窗口行和列的大小 + // 进行登录 time.Sleep(100 * time.Millisecond) client.Write([]byte(c.User + "\r\n")) @@ -49,8 +53,10 @@ func (c *ConnTelnet) NewClient() (*ConnTelnet, error) { client.Write([]byte(c.Password + "\r\n")) // fmt.Fprintln(client, c.User) // fmt.Fprintln(client, c.Password) - c.Client = &client + + // 排空连接登录的信息 + c.RunCMD("") return c, nil } @@ -70,32 +76,14 @@ func (c *ConnTelnet) RunCMD(cmd string) (string, error) { var buf bytes.Buffer tmp := make([]byte, 1024) - // 排空连接登录的信息 - for { - // 设置读取超时时间为100毫秒 - conn.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) - n, err := conn.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } - break - } - if n == 0 { - break - } - buf.Write(tmp[:n]) - } - buf.Reset() - // 写入命令 - _, err := conn.Write([]byte(cmd)) - if err != nil { - return "", err + if cmd != "" { + if _, err := conn.Write([]byte(cmd)); err != nil { + return "", err + } } - // 读取本次响应命令消息 + // 读取命令消息 for { // 设置读取超时时间为1000毫秒 conn.SetReadDeadline(time.Now().Add(1000 * time.Millisecond)) @@ -123,35 +111,8 @@ func (c *ConnTelnet) NewClientSession(cols, rows uint8) (*TelnetClientSession, e if c.Client == nil { return nil, fmt.Errorf("telnet client not connected") } - conn := *c.Client - - // 需要确保接收方理解并正确处理发送窗口大小设置命令 - conn.Write([]byte{255, 251, 31}) // 发送窗口大小选项 - conn.Write([]byte{255, 250, 31, 0, rows, 0, cols, 255, 240}) // 发送窗口行和列的大小 - - var buf bytes.Buffer - tmp := make([]byte, 1024) - // 排空连接登录的信息 - for { - // 设置读取超时时间为5毫秒 - conn.SetReadDeadline(time.Now().Add(5 * time.Millisecond)) - n, err := conn.Read(tmp) - if err != nil { - // 判断是否是超时错误 - if netErr, ok := err.(net.Error); ok && netErr.Timeout() { - break - } - break - } - if n == 0 { - break - } - buf.Write(tmp[:n]) - } - buf.Reset() - return &TelnetClientSession{ - Client: conn, + Client: *c.Client, }, nil }