服务器:
-module(gen_tcp_test).
-compile(export_all).
-define(Port ,11817).
start_server() ->
ListResp = gen_tcp:listen(?Port ,[binary, {packet, 0}, {active, false}, {reuseaddr, true}]),
case ListResp of
{ok, ListenSocket} ->
process_accept(ListenSocket ,0);
{error, Reason} ->
io:format("listen port:~b false,the reason is ~w ~n", [?Port ,Reason])
end.
process_accept(ListenSocket ,Num) ->
AccetpReason = gen_tcp:accept(ListenSocket),
case AccetpReason of
{ok, Socket} ->
io:format("connect num:~w ~n", [Num]),
spawn(gen_tcp_test ,process_accept ,[ListenSocket ,Num+1]),
wait_message(Socket,0,Num);
{error, Reason} ->
io:format("gen_tcp:accept error:~w ~n", [Reason])
end.
wait_message(Socket ,N ,Num) ->
case gen_tcp:recv(Socket ,N) of
{ok, Packet} ->
io:format("recv msg: ~w:~w ~n", [ Num ,binary_to_list(Packet)]),
gen_tcp:send(Socket ,list_to_binary(["resp:" ,Packet])),
wait_message(Socket ,0 ,Num);
{error, Reason} ->
io:format("wait_message error:~w ~n", [Reason])
end.
客户端:
-module(gen_tcp_client).
-compile(export_all).
-define(Port ,11817).
start_server() ->
ListResp = gen_tcp:connect("localhost" ,?Port ,[binary ,{packet ,0} ,{active, false}]),
case ListResp of
{ok, ConnectSocket} ->
SendMsg = <<"hello world">>,
io:format("connectOk~n", []),
gen_tcp:send(ConnectSocket ,SendMsg),
io:format("send Ok~n", []),
process_msg(ConnectSocket);
{error, Reason} ->
io:format("listen port:~b false,the reason is ~w ~n", [?Port ,Reason])
end.
process_msg(Socket ) ->
case gen_tcp:recv(Socket ,0) of
{ok, Packet} ->
io:format("reccive msg:~w ~n", [Packet]),
SendMsg = <<"hello world\n">>,
gen_tcp:send(Socket ,SendMsg),
process_msg(Socket);
{error, Reason} ->
io:format("wait_message error:~w ~n", [Reason])
end.