gpt4 book ai didi

java - Java实现Telnet协议(protocol)服务器时的OOB数据

转载 作者:行者123 更新时间:2023-12-02 04:40:10 24 4
gpt4 key购买 nike

我正在用 Java 编写一个基于文本的小型游戏服务器。令人惊讶的是,telnet 协议(protocol)比预期的更复杂,特别是它们使用“紧急”或“OOB”数据。

我正在努力理解如果我忽略 OOB 数据,或者使用“setOOBInline(true)”会丢失上下文并导致歧义,可能会丢失什么。

最佳答案

这是一个难题。

  • 如果您将 OOB 内联设置为 false,您将丢失通知。
  • 如果您将 OOB 内联设置为 true,它们可能会被注入(inject)到其他内容的中间。

一个可能的解决方案是此答案提供的线索:

显然,Tomcat 6.0 代码库有 JNI implementation of sockets以不同的方式处理 OOB。看起来您可以使用 atMark(...) 来测试套接字是否刚刚收到 OOB 标记。

<小时/>

更新 - 查看 telnet protocol spec 后,看来丢失 OOB 通知的影响不会是一个大问题。 Telnet 的“同步”机制需要发送 OOB 通知,并向常规流添加“DATA MARK”命令。它告诉接收端它可以丢弃数据(但不能丢弃 telnet 命令),直到看到“数据标记”为止。

如果接收端错过(或忽略)OOB 标记,则最终效果是它不会忽略数据。这是“基本上无害”的行为。不理想......但它不会阻止 telnet 工作。

<小时/>

幸运的是(正如 @EJP 所指出的)TCP OOB 通知机制现在很少使用。因此 Java 对它的有限支持并不重要。

还值得注意的是,处理 OOB 通知不仅仅是 Java 的问题。显然,( native /C)套接字 API 的不同实现以不兼容的方式处理它。

最好的建议是尽可能完全避免 OOB。当然不要将其设计到新协议(protocol)中。

关于java - Java实现Telnet协议(protocol)服务器时的OOB数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30282290/

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