今天学习了一下Erlang TCP编程,做了一个小Demo. 感觉比较好用的功能是:每当客户端Socket关闭的时候,会向服务器发送一条{error, closed}的消息,反之亦然。好像Java没有这个功能。
[code="erlang"]
-module(tcp_test).
-export([start_server/0, client/0, accept/1]).
start_server()->
{ok, ListenSocket}=gen_tcp:listen(9999,[binary,{active,false}]),
accept(ListenSocket).
accept(ListenSocket)->
{ok,Socket} = gen_tcp:accept(ListenSocket),
spawn(?MODULE, accept,[ListenSocket]),
process_request(Socket).
process_request(Socket)->
case gen_tcp:recv(Socket,0,5000) of
{ok,Binary}->
io:format("received request message ~p~n", [Binary]),
gen_tcp:send(Socket, "process successful"),
process_request(Socket);
{error, closed}->
[code="erlang"]
-module(tcp_test).
-export([start_server/0, client/0, accept/1]).
start_server()->
{ok, ListenSocket}=gen_tcp:listen(9999,[binary,{active,false}]),
accept(ListenSocket).
accept(ListenSocket)->
{ok,Socket} = gen_tcp:accept(ListenSocket),
spawn(?MODULE, accept,[ListenSocket]),
process_request(Socket).
process_request(Socket)->
case gen_tcp:recv(Socket,0,5000) of
{ok,Binary}->
io:format("received request message ~p~n", [Binary]),
gen_tcp:send(Socket, "process successful"),
process_request(Socket);
{error, closed}->