erlang 中gen_tcp 用于编写tcp程序,gen_udp用于编写udp程序。一个简单的tcp服务器echo示例:
start_echo_server()->
{ok,listen}= gen_tcp:listen(1234,[binary,{packet,4},{reuseaddr,true},{active,true}]),
{ok,socket}=get_tcp:accept(listen),
gen_tcp:close(listen),
loop(socket).
loop(socket) ->
receive
{tcp,socket,bin} ->
io:format(“serverreceived binary = ~p~n”,[bin])
str= binary_to_term(bin),
io:format(“server (unpacked) ~p~n”,[str]),
reply= lib_misc:string2value(str),
io:format(“serverreplying = ~p~n”,[reply]),
gen_tcp:send(socket,term_to_binary(reply)),
loop(socket);
{tcp_closed,socket} ->
io:format(“serversocket closed ~n”)
end.
tcp 的echo客户端示例:
echo_client_eval(str) ->
{ok,socket} = gen_tcp:connect(“localhost”,2345,[binary,{packet,4}]),
ok= gen_tcp:send(socket, term_to_binary(str)),
receive
{tcp,socket,bin}->
io:format(“clientreceived binary = ~p~n”,[bin]),
val=binary_to_term(bin),
io:format(“clientresult = ~p~n”,[val]),
gen_tcp:close(socket)
end.
udp server示例
udp_demo_server(port) ->
{ok,socket}= gen_udp:open(open,[binary]),
loop(socket).
loop(socket)->
receive
{udp,socket,host,port,bin}->
binreply= …,
gen_udp:send(socket,host,port,binreply),
loop(socket)
end.
udp client 示例:
udp_demo_client(request) ->
{ok,socket}= gen_udp:open(0,[binary]),
ok= gen_udp:send(socket,”localhost”,1234,request),
value= receive
{udp,socket,_,_,bin}-> {ok,bin}
after2000 -> error
end,
gen_udp:close(socket),
value
注意,因为udp是不可靠的,一定要设一个超时时间,而且reqeust最好小于500字节。
websocket, js 和erlang相结合,能够实现web的绝大多数功能。
如对本文有疑问,
点击进行留言回复!!
网友评论