我正在构建一个应用程序,它是一个实现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字符发送给用户而不是文件。 (邮件
模式已过时,不应实施或使用。)附加
模式可以由合作主机对定义。
答案 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序列。