2014-05-08 37 views
1

此我的代碼,以接收數據二郎調用gen_tcp被累加接收到的數據

-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=) 

數據不會積累

回答

2

TCP將數據表示爲與無消息結構的流。這與Erlangs的實現無關。

如果您需要消息結構,則必須在數據流中對其進行帶編碼。

Erlang可以幫助您創建一個簡單的內置數據包結構,其中包含1,2或4個字節長度的數據。這就是{packet N}對N等於1,2或4的作用。

但是您還需要發送符合此結構的數據。