【发布时间】:2015-04-27 20:41:54
【问题描述】:
所以我正在将我编写的 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 套接字库。
谢谢,
Ajm。
【问题讨论】:
-
this answer 有帮助吗?