首页 > 代码库 > 2.基础知识,Erlang gen_tcp 案例

2.基础知识,Erlang gen_tcp 案例

1.客户端和服务端互联案例,举例中客户端和服务端都是用Erlang
服务端
 1 server() -> 2     LSock = listen(), %监听本机的某个端口 3     {ok, Sock} = gen_tcp:accept(LSock), %保持监听状态,程序会停在这一步,直到有客户端连接上 4     {ok, Bin} = do_recv(Sock, []), %接收参数 5     ok = gen_tcp:close(Sock), %关闭这个监听 6     Bin. 7  8 %%监听本机的5678端口,发送的数据超过4字节才被接收 9 listen() ->10     {ok, LSock} = gen_tcp:listen(5678, [binary, {packet, 4},11                                         {active, false}]),12     LSock.13 14 %%接收参数,两种情况15 %%1.如果客户端一直发送消息,尾递归调用一直接收消息16 %%2.如果客户端关闭连接,返回{ok, Data}17 do_recv(Sock, Bs) ->18     case gen_tcp:recv(Sock, 0) of19         {ok, B} ->20             do_recv(Sock, [Bs, B]);21         {error, closed} ->22             {ok, list_to_binary(Bs)}23     end.


客户端
SomeHostInNet = "localhost", %%服务器IP    {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678,                                 [binary, {packet, 0}]), %连接上服务器,    %%服务器端表现:    %%1.在连接上服务器之前,服务端一直停在gen_tcp:accept(LSock),    %%2.链接上服务器之后,服务端程序继续执行,    %%3.执行到do_recv(Sock, []),又会处于监听状态(此时监听客户端发送的数据)    ok = gen_tcp:send(Sock, "Some Data"), %发送数据,这一步可以发送很多消息    ok = gen_tcp:send(Sock, "Some Data2"),    ok = gen_tcp:send(Sock, "Some Data3"),    %%服务端表现:服务端一直处于接收消息状态    ok = gen_tcp:close(Sock). %关闭连接,此时服务端do_recv(Sock, [])执行完毕,继续往下执行gen_tcp:close(Sock)

 



2.基础知识,Erlang gen_tcp 案例