gpt4 book ai didi

c++ - 与 telnet 客户端协商回显

转载 作者:行者123 更新时间:2023-11-28 04:42:33 25 4
gpt4 key购买 nike

出于某种原因,我想为标准 Telnet 应用程序创建一个服务器作为要连接的客户端。我用 C++ 编写了一个基本的 TCP 服务器,它的目的是提供一个交互式菜单,所以我必须在我这边设置 ECHO

当客户端连接时,我向它发送IAC WILL ECHO,我希望得到IAC DO ECHO。令我惊讶的是,我得到的是 IAC DO ECHOIAC WON'T ECHOIAC DON'T ECHO。三封邮件一封一封。而且客户端还在自己回显。

我做错了什么?这三个消息是什么意思?

int main() {
TcpListener tcpListener(10001); // custom tcp helper library
auto stream = tcpListener.acceptClient();
vector<uint8_t> msg = {255, 251, 1}; // send IAC WILL ECHO on start
stream.writeBytes(msg);
auto message = stream.readBytes(100);
while (!message.empty()) {
for (auto c : message) cout << (int)c << endl; // to see what i'm getting from client
cout << "length: " << message.size() << "\n";
stream.writeBytes(message); // echo back
message = stream.readBytes(100);
}
return 0;
}

最佳答案

我认为我的错误现在可以在我的代码中看到,但我处理了它的一些更复杂的版本。问题是我回应了来自客户端的所有消息,所以当我发送 IAC WILL ECHO 时,它以 IAC DO ECHO 回应。当我回应它时,客户说它不会这样做,然后发送 IAC DON'T ECHO(我认为是为了澄清情况)。因此,当然要避免此类错误,首先要在 telnet 服务器中正确处理协商。

关于c++ - 与 telnet 客户端协商回显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com