我看到了Indy,默认情况下,必须以某种“网络格式”发送的秘密数据,以及接收到的数据被转换回来。这样做有什么意义?在套接字的Write和Read之间,没有人使用那些只有"I“才知道它们的含义的值。那么,比特顺序有什么关系呢?我有自己的TCP客户端协议,我严格地将命令的值和发送的其他内容写入临时缓冲区。我想知道让我的协议变得复杂是否有意义?
发布于 2021-03-04 21:21:56
i看到,在默认情况下,必须以某种“网络格式”发送的隐蔽数据,以及接收到的数据,将被转换回。这样做有什么意义?
并非所有平台都使用相同的endian对多字节整数中的字节进行排序。有些平台是小终端,有些是大端平台。为了便于跨平台共享整数,“网络字节顺序”被标准化为大端。因此,HostToNetwork()将将多字节整数从调用平台的本机endian转换为大端,而NetworkToHost()将将多字节整数从大端转换为调用平台的本地endian。
在写入和从套接字读取之间的
没有人使用那些只有"I“才知道它们的含义的值。那么,比特顺序有什么关系呢?
如果您同时编写发送方和接收方,那么您当然可以使用任何您想要的终端。但在通过网络连接传输整数时,通常只使用大端。也许有一天,你或其他人会为你的系统写一个不同的发送者/接收者,甚至在另一个平台上。因此,如果对整数使用标准化的endian,那么以后就不必担心互操作性问题了。
我有自己的TCP协议,我严格地将命令的值和发送的其他内容写入临时缓冲区。
当然,这只有在发送方和接收方使用相同的endian表示内存中的整数时才有效。
,我想知道用这些转换使我的协议复杂化是否有意义?
进行endian转换并不会使任何事情变得复杂,但它可以安全地保护它。
https://stackoverflow.com/questions/66483055
复制相似问题