小编opb*_*avo的帖子

为什么有时收不到第二条消息?

我创建了一个简单的服务器来接收来自单个客户端的消息,但是当我一次发送多条消息时,有时它们没有按我的预期接收。这是服务器代码:

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
推荐指数
1
解决办法
59
查看次数

标签 统计

erlang ×1