这是我接收数据的代码
-module(t).
-compile(export_all).
start() ->
{ok, LSock} = gen_tcp:listen(5555, [binary, {packet, 0},
{active, false}]),
{ok, Sock} = gen_tcp:accept(LSock),
{ok, Bin} = do_recv(Sock, []),
ok = gen_tcp:close(Sock),
Bin.
do_recv(Sock, Bs) ->
io:format("(="), io:format(Bs),io:format("=)~n"),
case gen_tcp:recv(Sock, 0) of
{ok, B} ->
do_recv(Sock, [Bs, B]);
{error, closed} ->
{ok, list_to_binary(Bs)}
end.
我依次发送到套接字 - 1、然后 2、然后 3、然后 4、然后 5
代码是累积接收到的数据
打印到屏幕
(=12345=)
如何修改代码为打印的代码
(=1=)
(=2=)
(=3=)
(=4=)
(=5=)
数据未累积
最佳答案
TCP 将数据表示为没有消息结构的流。这与 Erlangs 的实现无关。
如果您需要消息结构,则必须将其编码到数据流中的带内。
Erlang 帮助您创建一个简单的内置数据包结构,其长度为 1、2 或 4 字节,后跟数据。这就是当 N 等于 1,2 或 4 时 {packet N}
所做的事情
但是您还需要发送符合此结构的数据。
关于Erlang gen_tcp 是累积接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23547985/