所以我正在将我写的一个Python程序转换成Erlang,而我已经很久没有使用Erlang了。所以我客人我回到了初学者的水平。无论如何,根据经验,我在处理套接字时使用的每种语言都有发送/接收函数,这些函数总是返回发送/接收数据的长度。然而,在 Erlangs gen_tcp 的情况下,似乎并没有这样做。
因此,当我调用 send/recv/或 inet:setopts 时,它知道数据包何时结束?我是否需要编写一个循环的 recvAll/sendAll 函数,以便在我希望接收的数据包(字符串)中找到转义符或 \n?
http://erlang.org/doc/man/gen_tcp.html#recv-2
我正在使用的示例代码:
server(LS) ->
case gen_tcp:accept(LS) of
{ok,S} ->
loop(S),
server(LS);
Other ->
io:format("accept returned ~w - goodbye!~n",[Other]),
ok
end.
loop(S) ->
inet:setopts(S,[{active,once}]),
receive
{tcp,S,Data} ->
Answer = process(Data), % Not implemented in this example
gen_tcp:send(S,Answer),
loop(S);
{tcp_closed,S} ->
io:format("Socket ~w closed [~w]~n",[S,self()]),
ok
end.
仅通过查看示例和文档,Erlang 似乎就知道了。我想确认一下,因为接收到的数据长度可以在 20 字节到 9216 字节之间,或者可以分块发送,因为客户端是我正在编写的 PHP 套接字库。
谢谢,
阿杰姆。