sockets - 编写平台无关的基于 Socket 的二进制解析代码

标签 sockets erlang endianness

我有一个 erlang 应用程序,其中包括解析来自套接字(TCP 和 UDP)的二进制数据。二进制数据是根据一些特定的协议(protocol),所以我的 TCP 和 UDP sock 选项如下:

TCP socks :
Opts = [二进制,{packet,0},{reuseaddr,true},
{keepalive, true}, {backlog, 30}, {active, false}],

UDP socks :
[二进制,{active,once},{recbuf,2097152}]

现在,当我解析从套接字获得的数据时,我确实喜欢这样(在 UNIX 上):

<< 版本:4/大无符号整数单位:8,
长度:2/大无符号整数:8,
_Rest/二进制 >> = Bin_event_From_Socket。

现在,当在 LINUX 上运行时,这会给我一个问题,因为 LINUX 是基于小端的。所以,对我来说,这里的选项是在上面的代码中将“大”转换为“小”。

但是,Erlang 是一种基于 VM 的语言,我必须具备一些编写平台无关代码的便利。我搜索了 NET,但找不到太多关于它的信息。

那么,这里的问题是如何编写独立于平台的套接字数据解析代码?

谢谢。

最佳答案

而不是 biglittle您可以使用字节序 native .这将默认为您所在平台的正确字节序。

关于sockets - 编写平台无关的基于 Socket 的二进制解析代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561808/

相关文章:

.Net 停止监听套接字

Python 连接数据报套接字

Java并发套接字: not being able to share a variable between threads

datetime - 如何将 xx 秒、分钟或小时添加到 DateTime 结构?

c - 大端字节数组到 C、arm 中的小端结构元素

c - 确定 C 语言机器体系结构的正确方法

C++:TCP文件传输中的字节顺序差异

cocoa-touch - 即使断开连接,GCDAsyncSocket 也无法多次接受 OnPort

video - 对于简单的视频格式,我有哪些选择?

Erlang 中的 TCP 端口