出于某种原因,我想为标准Telnet应用程序创建一个服务器作为连接的客户端。我用C ++编写了一个基本的TCP服务器,其目的是提供一个交互式菜单,所以我必须在我这边设置 ECHO 。
当客户端连接时,我发送 IAC WILL ECHO ,我希望 IAC DO ECHO 。令我惊讶的是,我得到的是 IAC DO ECHO , IAC WON' ECHO , IAC 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;
}
答案 0 :(得分:1)
我认为我的错误现在可以在我的代码中看到,但是我处理了一些更复杂的版本。问题是我回复了来自客户端的所有消息,所以当我发送IAC WILL ECHO时,它回复了IAC DO ECHO。当我回应它时,客户表示不会这样做,然后发送IAC DON&#T; ECHO(以清除我认为的情况)。所以当然要避免这样的错误,telnet服务器的第一件事就是正确处理协商。