首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Erlang TCP编程施用packet属性保证send和receive一一对应

2012-10-20 
Erlang TCP编程使用packet属性保证send和receive一一对应当获取Socket时,指定packet属性,可以保证server端

Erlang TCP编程使用packet属性保证send和receive一一对应
当获取Socket时,指定packet属性,可以保证server端一次只接受一个request数据包。

测试结果:

指定{packet,4}

2> tcp_test:start_server().sleep start, loop 2 timessleep 1000, time: 1sleep 1000, time: 2received request message <<"erlang client sending message one">>received request message <<"erlang client sending message two">>received request message <<"erlang client sending message four">>received request message <<"erlang client sending message five">>received request message <<"erlang client sending message six">>received request message <<"erlang client sending message seven">>received request message <<"erlang client sending message eight">>socket closeok




指定{packet,0}

2> tcp_test:start_server().sleep start, loop 2 timessleep 1000, time: 1sleep 1000, time: 2received request message <<"erlang client sending message oneerlang client sending message twoerlang client sending message fourerlang client sending message fiveerlang client sending message sixerlang client sending message sevenerlang client sending message eight">>socket closeok






测试代码

    -module(tcp_test).      -export([start_server/0, client/0, accept/1]).            start_server()-&gt;          {ok, ListenSocket}=gen_tcp:listen(9999,[binary,{active,false},{packet, 4}]),          accept(ListenSocket).                accept(ListenSocket)-&gt;          {ok,Socket} = gen_tcp:accept(ListenSocket),          spawn(?MODULE, accept,[ListenSocket]),sleep(2, 1000),        process_request(Socket).                process_request(Socket)-&gt;          case gen_tcp:recv(Socket,0) of              {ok,Binary}-&gt;                  io:format(&quot;received request message ~p~n&quot;, [Binary]),                gen_tcp:send(Socket, &quot;process successful&quot;),                  process_request(Socket);              {error, closed}-&gt;                  io:format(&quot;socket close ~n&quot;);              _Req-&gt;                  io:format(&quot;receive ~p~n&quot;, [_Req])          end.                client()-&gt;          {ok,Socket}=gen_tcp:connect({127,0,0,1},9999,[binary,{packet,4},{active,false}]),          gen_tcp:send(Socket, &quot;erlang client sending message one&quot;),          gen_tcp:send(Socket, &quot;erlang client sending message two&quot;),gen_tcp:send(Socket, &quot;erlang client sending message four&quot;),gen_tcp:send(Socket, &quot;erlang client sending message five&quot;),gen_tcp:send(Socket, &quot;erlang client sending message six&quot;),gen_tcp:send(Socket, &quot;erlang client sending message seven&quot;),gen_tcp:send(Socket, &quot;erlang client sending message eight&quot;),sleep(2, 1000),        ok = gen_tcp:close(Socket).sleep(Count, Time)-&gt;io:format(&quot;sleep start, loop ~p times \n&quot;, [Count]),sleep(1, Count, Time).sleep(Start, Count, Time) -&gt;receive after Time -&gt;io:format(&quot;sleep ~p, time: ~p\n&quot;, [Time, Start]),if Start sleep(Start + 1, Count, Time);true -&gt; okendend.


本博客由广州礼邦办公家具有限公司赞助。

热点排行