再看erlang的socket部分基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再看erlang的socket部分基础相关的知识,希望对你有一定的参考价值。
socket的选项里面的{packet,0}和{packet,raw}的区别
{packet,2} erlang处理2字节大端包头 {packet,4} erlang处理4字节大端包头 {packet,0} erlang不负责拆包,用户自己处理 {packet,raw} erlang不负责拆包,用户自己处理,和{packet,0}的区别应该在于raw socket可以处理icmp之类的特殊包
粘包处理
自己处理粘包的时候,使用{active, N}(还没有到被动模式)和{active, true}选项的时候,在handle_info({tcp,Socket,Data}里面需要好好处理下粘包, 具体可以看下面的例子 https://github.com/kqqsysu/ssdb-erlang/blob/master/src/ssdb_conn.erl
关于在被动模式下以recv方式收包
如果是{packet,0}或者{packet, raw},需要指定recv的大小,否则会全部收取,收到的数据需要和原来拆包剩下的数据一起组合为新数据,重新循环拆包,无法去掉包头,因为包是自定义的,有没有包头都不知道 如果是{packet,x},x为124,则recv直接传0参数, 收到的数据是去掉1字节/2字节/4字节包头的业务数据
参考地址
以上是关于再看erlang的socket部分基础的主要内容,如果未能解决你的问题,请参考以下文章
1500行代码!拥有自己的聊天室------ socket聊天室实现(GUI,线程,TCP)
获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算
Erlang在socket中接受连接只有在有多层进程时才会失败