我创建了一个简单的服务器来接收来自单个客户端的消息,但是当我一次发送多条消息时,有时它们没有按我的预期接收。这是服务器代码:
test() ->
{ok, LSock} = gen_tcp:listen(7777, [binary, {active, true}, {packet, 0}, {reuseaddr, true}]),
spawn(fun() -> acceptor(LSock) end).
loop() ->
receive
{tcp, Socket, Bin} ->
io:format("Received: ~p~n", [binary_to_term(Bin)]),
loop();
{tcp_closed, Socket} ->
io:format("Socket Closed~n"),
exit(normal);
{tcp_error, _} ->
exit(normal);
_ ->
io:format("Unknown Message~n"),
exit(normal)
end.
acceptor(LSock) ->
{ok, Sock} = gen_tcp:accept(LSock),
io:format("Client Connected~n"),
Pid = spawn(fun() -> loop() end),
gen_tcp:controlling_process(Sock, Pid).
Run Code Online (Sandbox Code Playgroud)
我连接到服务器的方式是通过 Erlang shell,如下所示:
{ok, Socket} = gen_tcp:connect("localhost", 7777, [binary, {packet, 0}, {active, true}]).`
Run Code Online (Sandbox Code Playgroud)
但是当我gen_tcp:send(Socket, term_to_binary(data1)),gen_tcp:send(Socket, term_to_binary(data3)).连续多次执行时,大多数时候它只显示“已接收数据1”而不是“已接收数据3”。例如,当我两次调用该部分代码时,我得到:
Received: …Run Code Online (Sandbox Code Playgroud) erlang ×1