我正在编写一个程序,用于在 Windows 控制台上显示 Linux(Ubuntu)PTY bash 输出数据。但是,显示某些字节(例如颜色字节)看起来不太友好。有协议文档来指示如何解析它吗?谢谢。
2020-10-03:我做了两个程序,一个是 Linux 上的 pty 服务器,一个是 Windows 上的 pty 客户端,它们通过 TCP/IP 进行通信。服务器程序的代码如下:
server->onBufferReceived = [&mpty](EasyTCP::IConnection* c, EasyTCP::AutoBuffer data)
{
int ret = write(mpty, data.data(), data.size());
...
};
ret = openpty(&mpty, &spty, NULL, NULL, NULL);
if (ret == -1)
{
fprintf(stderr, "openpty failed, err[%d]: %s", ret, strerror(errno));
return 1;
}
printf("%s\n", ttyname(spty));
pid_t child = fork();
if (child == -1)
{
fprintf(stderr, "fork failed, err[%d]: %s", ret, strerror(errno));
return 1;
}
if (child == 0)
{
login_tty(spty);
execl("/bin/bash", "");
return 0;
}
assert(server->open(7777));
...
if (FD_ISSET(mpty, &rset))
{
int n = read(mpty, buf, sizeof(buf) - 1);
...
buf[n] = 0;
...
assert(connection->send(sendBuf));
}
客户端程序代码如下:
client->onBufferReceived = [](EasyTCP::IConnection* c, EasyTCP::AutoBuffer data)
{
printf(data.data());
fflush(stdout);
data.resize(0);
assert (c->recv(data, false));
};
...
client->connect("xxxxxx", xxxx);
....
int k = getchar();
if (k < 0 || k > 255)
{
fprintf(stderr, "getchar k = %d", k);
continue;
}
char c = (char)k;
EasyTCP::AutoBuffer sendBuf(&c, 1);
sendBuf.resize();
assert (client->send(sendBuf));
答案1
我找到了一份关于该协议的文档。请参阅https://en.wikipedia.org/wiki/ANSI_escape_code