Fir*_*DoL 5 c++ protocols tftp
我正在构建一个应用程序,它是一个实现tftp协议的服务器.我很难理解tftp中ASCII格式和二进制格式(netascii和octect)之间的区别,以及如何以协议状态不同地读取文件.
我知道ASCII字符可以用单个字节表示.所以我不明白读取ascii模式(每个字符1个字节)和二进制模式(1个原始字节)之间的区别.
我可以使用标志ios :: binary获取二进制模式(在tftp中为octet)而没有ascii(nettscii在tftp中)的文件,但是我真的不明白在这两种方式中读取文件的区别是什么(我总是想出一个字节数组).
如果有人能帮助我理解,我会非常感激
tftp协议规范:http://www.rfc-editor.org/rfc/rfc1350.txt
我不明白的部分就是这个:
目前支持三种传输模式:netascii(这是"美国信息交换标准代码"
[1]中定义的ascii,具有"Telnet协议
规范"[3]中指定的修改.)请注意,它是8位ascii.
本文档中将使用术语"netascii"来表示
ascii的这个特定版本.); octet(这取代了本文档先前版本的"二进制"模式.)原始8位字节; mail,
netascii字符发送给用户而不是文件.(邮件
模式已过时,不应实现或使用.)其他
模式可由成对的协作主机定义.
有两个段落可以帮助澄清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)序列.