Flutter 在Dart中解码SSH shell的输出
我用dart(flatter)编写了这段代码,它使用这个包实现了一个SSH客户机Flutter 在Dart中解码SSH shell的输出,flutter,dart,ssh,Flutter,Dart,Ssh,我用dart(flatter)编写了这段代码,它使用这个包实现了一个SSH客户机 导入“包装:颤振/材料.省道”; 导入“package:ssh/ssh.dart”; void main()=>runApp(Home()); 类Home扩展了StatefulWidget{ @凌驾 _HomeState createState()=>\u HomeState(); } 类(HomeState扩展状态){ 串出“”; void send()异步{ 设置状态(){ out=“”; 打印(输出代码单位)
导入“包装:颤振/材料.省道”;
导入“package:ssh/ssh.dart”;
void main()=>runApp(Home());
类Home扩展了StatefulWidget{
@凌驾
_HomeState createState()=>\u HomeState();
}
类(HomeState扩展状态){
串出“”;
void send()异步{
设置状态(){
out=“”;
打印(输出代码单位);
});
SSHClient客户端=新的SSHClient(
主持人:“192.168.10.88”,
港口:22,
用户名:“耶稣”,
密码工作:“*******”,
);
等待client.connect();
等待客户端启动shell(
字体:“香草”,
回调:(动态res){
设置状态(){
out+=res;
打印(res.codeUnits);
/*
打印输出:
[27, 91, 50, 74, 27, 91, 109, 27, 91, 72, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 105, 110, 100, 111, 119, 115, 32, 91, 86, 101, 114, 115, 105, 111, 110, 32, 49, 48, 46, 48, 46, 49, 57, 48, 52, 49, 46, 51, 56, 56, 93, 27, 93, 48, 59, 67, 58, 92, 87, 73, 78, 68, 79, 87, 83, 92, 115, 121, 115, 116, 101, 109, 51, 50, 92, 99, 111, 110, 104, 111, 115, 116, 46, 101, 120, 101, 7, 27, 91, 63, 50, 53, 104, 10]
[40, 99, 41, 32, 50, 48, 50, 48, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10]
[27, 91, 53, 50, 88, 10]
*/
});
},
);
//等待客户端。WriteShell(“cd\r\n”);
推迟(
常数持续时间(秒:5),
()async=>wait client.closeShell(),
);
}
@凌驾
小部件构建(构建上下文){
返回材料PP(
家:脚手架(
appBar:appBar(标题:文本(“SSH”),
主体:容器(
子:列(
儿童:[
扁平按钮(
子项:文本(“发送命令”),
按:发送,
),
文本(输出),
],
),
),
),
);
}
}
但是,当我运行程序并启动客户机时,模拟shell的输出是垃圾,就像这样
我想我需要做一些解码来解释转义字符“27”,但我不知道怎么做
import 'package:flutter/material.dart';
import 'package:ssh/ssh.dart';
void main() => runApp(Home());
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
String out = "";
void send() async {
setState(() {
out = "";
print(out.codeUnits);
});
SSHClient client = new SSHClient(
host: "192.168.10.88",
port: 22,
username: "Jesus",
passwordOrKey: "******",
);
await client.connect();
await client.startShell(
ptyType: "vanilla",
callback: (dynamic res) {
setState(() {
out += res;
print(res.codeUnits);
/*
print output:
[27, 91, 50, 74, 27, 91, 109, 27, 91, 72, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 87, 105, 110, 100, 111, 119, 115, 32, 91, 86, 101, 114, 115, 105, 111, 110, 32, 49, 48, 46, 48, 46, 49, 57, 48, 52, 49, 46, 51, 56, 56, 93, 27, 93, 48, 59, 67, 58, 92, 87, 73, 78, 68, 79, 87, 83, 92, 115, 121, 115, 116, 101, 109, 51, 50, 92, 99, 111, 110, 104, 111, 115, 116, 46, 101, 120, 101, 7, 27, 91, 63, 50, 53, 104, 10]
[40, 99, 41, 32, 50, 48, 50, 48, 32, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 67, 111, 114, 112, 111, 114, 97, 116, 105, 111, 110, 46, 32, 65, 108, 108, 32, 114, 105, 103, 104, 116, 115, 32, 114, 101, 115, 101, 114, 118, 101, 100, 46, 10]
[27, 91, 53, 50, 88, 10]
*/
});
},
);
//await client.writeToShell("cd\r\n");
Future.delayed(
const Duration(seconds: 5),
() async => await client.closeShell(),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("SSH")),
body: Container(
child: Column(
children: <Widget>[
FlatButton(
child: Text("Send Command"),
onPressed: send,
),
Text(out),
],
),
),
),
);
}
}