如何异步/批量接收Telnet向TcpClient发送的消息及相关处理?
Telnet与MUD服务器交互的常见问题解答
1. 逐字符同步发送是否合理?
完全合理。Telnet协议的原始设计就是面向终端实时交互的,默认开启本地回显+逐字符传输模式——这是为了适配早期物理终端的使用场景,用户输入的每个字符都需要即时反馈到终端上,同时实时发送给服务器。所以你看到的流式发送是Telnet的标准默认行为。
2. 能否协商实现批量发送消息?
可以,通过Telnet的选项协商机制开启LINEMODE模式就能实现整行批量发送:
- 服务器向客户端发送
IAC WILL LINEMODE指令,表明希望启用行模式 - 客户端响应
IAC DO LINEMODE后,就会切换为回车时发送整行的模式,不再逐字符传输 - 如果客户端不支持LINEMODE,会返回
IAC DONT LINEMODE,这时候就得回到逐字符处理的逻辑
3. 默认场景下的处理方式
如果保持Telnet的默认逐字符模式,服务器需要做以下处理:
- 维护一个接收缓冲区:每次收到字节流就追加到缓冲区中
- 扫描缓冲区,识别命令终止符:Telnet默认的行终止符是
\r\n(回车+换行),你需要以这个为标记,从缓冲区中提取完整的命令行 - 处理剩余数据:提取完完整命令后,缓冲区中剩下的不完整数据继续保留,等待后续字节流补充
- 过滤Telnet控制码:注意识别并处理Telnet的控制指令(比如以
IAC(0xFF)开头的字节序列),避免这些控制码干扰你的命令解析逻辑
内容的提问来源于stack exchange,提问作者TeddyK
相关产品推荐
相关产品推荐

