erlang:decode_packet/3
从一个二进制数据里解码一个协议包
用法:
decode_packet(Type,Bin,Options) -> {ok,Packet,Rest} | {more,Length} | {error,Reason}
根据指定类型 Type 的包协议,解码一个二进制数据 Bin。很像 Socket 的包处理选项 {packet,Type}。
如果整个数据包包含在二进制数据 Bin 里,那么它将以 {ok,Packet,Rest} 的形式,跟剩余的二进制数据一起返回。
如果二进制数据并不完全包含整个数据包,那么将返回 {more,Length}。变量 Length 或是数据包的总大小,或返回 undefined(如果包的大小读取不了的话)。后来添加的更多数据可以被函数 erlang:decode_packet/2 再次调用处理。
如果数据包并不符合协议格式,那么将返回 {error,Reason}。
erlang:decode_packet(1, <<3, "abcd">>, []).
erlang:decode_packet(1, <<5, "abcd">>, []).