packet是erlang网络编程中使用频率较高的一个参数,例如: gen_tcp:listen(Port, [binary, {active, true}, {packet,
2}])
表示接收到的包头有两个字节:
receive
{tcp, Socket, Binary} ->
接收到的Binary中将不包含2字节的包头,包头会剥离,我们收到的将只是单纯的Body,这极大的方便了我们编程。

packet支持的参数有:
raw | 0  未完成的packeting,即不管数据包头,而是根据langth参数接收数据。

1 | 2 | 4
表示包头的长度,分别是1,2,4个字节(在大端字节序中还包含一个无符号整型),当设置了此参数时,接收到数据后将自动剥离对应长度的头部,只保留Body。

asn1 | cdr | sunrm | fcgi | tpkt | line
设置以上参数时,应用程序将保证数据包头部的正确性,但是在gen_tcp:recv2,3接收到的数据包中并不剥离头部。

http | http_bin
设置以上参数,收到的数据将被erlang:decode_packet/3格式化,在被动模式下将收到{ok,
HttpPacket},主动模式下将收到{http, Socket, HttpPacket}.
09-26 14:13