模拟服务器和客户端通信
%%%-------------------------------------------------------------------
%%% @author Administrator
%%% @copyright (C) 2024, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 03. 12月 2024 22:28
%%%-------------------------------------------------------------------
-module(test_socket_server).
-compile(export_all).
nano_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} ->Val = binary_to_term(Bin),io:format("客户端 收到 = ~p~n",[Val]),gen_tcp:close(Socket)end.
start_nano_server() ->{ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4},{reuseaddr, true},{active, true}]),{ok, Socket} = gen_tcp:accept(Listen),gen_tcp:close(Listen),loop(Socket).loop(Socket) ->receive{tcp, Socket, Bin} ->Str = binary_to_term(Bin),io:format("服务器收到的Str = ~p~n",[Str]),Reply = lib_misc:string2value(Str),io:format("服务器 回复 = ~p~n",[Reply]),gen_tcp:send(Socket, term_to_binary(Reply)),loop(Socket);{tcp_closed, Socket} ->io:format("服务器关闭~n")end.
error_test() ->spawn(fun() -> error_test_server() end),lib_misc:sleep(2000),{ok,Socket} = gen_tcp:connect("localhost",4321,[binary, {packet, 2}]),io:format("connected to:~p~n",[Socket]),gen_tcp:send(Socket, <<"123">>),receiveAny ->io:format("Any=~p~n",[Any])end.error_test_server() ->{ok, Listen} = gen_tcp:listen(4321, [binary,{packet,2}]),{ok, Socket} = gen_tcp:accept(Listen),error_test_server_loop(Socket).error_test_server_loop(Socket) ->receive{tcp, Socket, Data} ->io:format("回复:~p~n",[Data]),atom_to_list(Data),error_test_server_loop(Socket)end.
命令行测试
server
6> test_socket_server:start_nano_server().
服务器收到的Str = "list_to_tuple([2+3*4,10+20])"
服务器 回复 = {14,30}
服务器关闭
ok
7>
client
3> test_socket_server:nano_client_eval("list_to_tuple([2+3*4,10+20])").
客户端 收到 = {14,30}
ok
4>