Tftp协议实现和netascii和octet之间的区别

时间:2011-08-18 00:22:38

标签: c++ protocols tftp

我正在构建一个应用程序,它是一个实现tftp协议的服务器。我很难理解tftp中ASCII格式和二进制格式(netascii和octect)之间的区别,以及我应该如何在协议状态下以不同方式读取文件。

我知道ASCII字符可以用单个字节表示。所以我不明白读取ascii模式(每个字符1个字节)和二进制模式(1个原始字节)之间有什么区别。

我可以用二进制模式的标志ios :: binary读取文件(tftp中的八位字节),而没有它用于ascii(tbsp中的netascii),但我真的不明白这两种方式读取文件的区别是什么(我总是想出一个字节数组。)

如果有人能帮助我理解,我会非常感激

tftp协议规范:http://www.rfc-editor.org/rfc/rfc1350.txt

我不明白的部分是这一部分:

  

目前支持三种转移模式:netascii(这是   ascii,如“美国信息交换标准代码”中所定义   [1]具有“Telnet协议”中规定的修改   规范“[3]。)注意它是8位ascii。术语
  “netascii”将在本文档中用于表示这一点   特定版本的ascii。);八位字节(这取代了“二进制”模式   本文档的先前版本。)原始8位字节;邮件,
  netascii字符发送给用户而不是文件。 (邮件
  模式已过时,不应实施或使用。)附加
  模式可以由合作主机对定义。

1 个答案:

答案 0 :(得分:7)

有两个段落可以帮助澄清netascii在RFC-1350 / TFTP中的用途:

  

netascii(这是“美国信息交换标准代码”[1]中定义的ascii,带有“Telnet协议规范”[3]中规定的修改。)

“Telnet协议规范”是RFC-764,它描述了在“网络虚拟终端”上使用的各种ASCII代码的解释。因此,netascii将遵循这些解释(其中包括必须以CR / LF序列终止这些行)。

  

接收netascii模式数据的主机必须将数据转换为自己的格式。

因此,使用EBCDIC作为本机编码的主机可能会将netascii转换为该编码,但会留下“八位字节”数据。

如果您在使用LF进行行结尾的Unix(或其他)系统上实现TFTP服务器,则需要为netascii传输添加CR(以及将文件中的实际CR字符转换为CR / NUL序列。