繁体   English   中英

Telnet over half-duplex comms link - negotiation parameters

[英]Telnet over half-duplex comms link - negotiation parameters

我们的嵌入式系统需要一个Telnet(串行)接口,由于硬件/传统系统,它通过半双工链路(RS485)工作。 是的,我知道 - 不,我们无法改变它,业界喜欢这样。

这样做的问题是,当我们向终端发送一连串文本时,用户可以按下按钮并在线路上发送数据。

Telnet支持IAC-> GA(Go Ahead)命令向用户终端发信号它可以开始发送数据,但是我读过的任何RFC中都没有关于告诉用户终端停止发送数据的信息,所以我们可以刷新屏幕。

不幸的是,超过1973年的所有RFC都假设将使用SGA( 抑制前进 )模式,因此很少提及。 遗憾的是,似乎没有单个RFC或其他文档实际涵盖整个协议。

有没有人有任何信息/链接更全面地记录telnet协议(或只是Go Ahead行为)? 我意识到其中一些可能写在带有绿色条纹的羊皮纸上;)

重新编辑:为什么这个编程问题的“偏离主题”关闭? Telnet是OSI模型的第7层你知道吗...

啊...... RS-485 ......我记得很清楚! :-)

GA定义被破坏(参见http://tools.ietf.org/html/rfc596 ),但对于串行实现应该没问题,因为没有分解的分解。

您要求的是“反向休息”:

“反向中断”是通过半双工路径连接到终端的计算机可以在先前放弃它之后重新获得对进一步打字的路径的控制的手段。

就其本质而言,“中断”(反向或其他)必须在半双工连接上是带外的,因为它需要能够随时发送。

编辑:聊天结果的新信息:但是,如果您不希望中断实际传输( RFC393 ,反向中断情况“b”), 并且带有前进令牌的一方不会切换硬件“发送”模式除了实际发送时(即使没有发送数据,RS-485在此模式下也无法接收) 并且偶尔会发生损坏/截断传输, 并且 telnet程序正确实现了这个相当不寻常的角落情况, 那么在带内发送此代码可能是可以接受的。

我能想到的另一种解决方法是破解客户端Telnet程序,即使没有其他任何东西可以发送,也会定期向服务器发送一个“反复”数据包。 这将允许服务器进行更新并作为回报“先行”; 它有点像“令牌戒指”。 您甚至不必延迟 - 当收到“预先”时,发送所有待处理数据(可能是无)然后返回“正常”。

可能的替代方案:

既然你也控制了ser-> ip设备,为什么不在服务器和设备之间简单地使用专用协议呢?

  • 服务器发送STX data stream ETX

  • 客户端发送STX data stream ETX

  • 不要拖延地重复

如果任何一方的数据缓冲区中没有数据,那么它只是一个STX ETX对,有效地告诉对方“继续”。 如果在250ms内没有任何东西来自另一侧,请重新发送ETX

您甚至可以通过在检测到错误的情况下将STX data stream ETX CRC1 CRC2NAK (而不是STX ... )应答一起进行扩展以进行错误检测,并导致重新传输整个最后一个数据包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM