Erlang之实现UDP乘介服务器

udp_example.erl:

-module(udp_example).
-compile(export_all).

start_server() ->
	spawn(fun() -> server(4000) end).

server(Port) ->
	{ok, Socket} = gen_udp:open(Port, [binary]),
	io:format("server start at ~p~n",[Port]),
	loop(Socket).

loop(Socket) ->
	receive
		{udp, Socket, Host, Port, Bin} = Msg ->
			io:format("server received:~p~n", [Msg]),
			N = binary_to_term(Bin),
			Fac = fac(N),
			gen_udp:send(Socket, Host, Port, term_to_binary(Fac)),
			loop(Socket)
	end.

fac(0) -> 1;
fac(N) -> N*fac(N-1).

client(N) ->
	{ok, Socket} = gen_udp:open(0, [binary]),
	io:format("client open at:~p~n", [Socket]),
	ok = gen_udp:send(Socket, "localhost", 4000,term_to_binary(N)),
	Value = receive
		{udp, Socket, _, _,Bin} = Msg ->
			io:format("client received:~p~n",[Msg]),
			binary_to_term(Bin)
		after 2000 ->
			0
		end,
	gen_udp:close(Socket),
	Value.

1.udp是面向无连接的,所以只需要一个连接对象,就是一个socket。

2.udp是一次传一个包的,所以无需像TCP那样协商好一次的包是多大。

3.若包过大,推荐用TCP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值