前言
发现erlang 网络编程部分的博客写得都挺多的,但比较缺比较全的总结,所以打算写一篇从基础案例到做个游戏网关的文章。erlang 提供了tcp/udp 套接字编程,本系列只讲Tcp相关
服务器和客户端工作方式
服务器
首先,我们打开shell调用 gen_tcp:listen (Port,option)进行监听套接字
1> {ok, ListenSocket} = gen_tcp:listen(8088, [binary,{active,true},{packet,0}]).
{ok,#Port<0.508>}
2> {ok,Sokcet} = gen_tcp:accept(ListenSocket).
这里8088是监听端口,binary里表示接收的是二进制串,{active,true}是主动模式,socket收到消息以{tcp, Socket, Data} | {tcp_closed, Socket} 主动投递给进程。,{packet,N},N是包头的长度,以字节为单位,包头会被自动添加和解析,这个参数关系到是否会粘包(事实上socket是没有粘包这种概念的,很多新手因为这个词都会被搞得云里雾里的,TCP本来就是基于字节流而不是消息包的协议,正确的解读应该是应用层协议的解析,这个后面我再讲),N为0时包头长度为0
返回监听套接字后我们需要调用gen_tcp:accept(ListenSocket)等待接收连接,在没有客户端连接之前,是堵塞的,Socket是不会返回的,shell会卡住。用accept/2的话有一个timeout参数 ,超时没有连接会关闭
客户端