Chinaunix首页 | 论坛 | 博客
  • 博客访问: 651045
  • 博文数量: 149
  • 博客积分: 3901
  • 博客等级: 中校
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-16 14:33
文章分类

全部博文(149)

文章存档

2014年(2)

2013年(10)

2012年(32)

2011年(21)

2010年(84)

分类: Python/Ruby

2012-02-16 18:05:45








erl_tcp.erl

  1. -module(erl_tcp).
  2. -export([start_server/0, connect/1, recv_loop/1]).

  3. -define(LISTEN_PORT, 9000).
  4. -define(TCP_OPTS, [binary, {packet, raw}, {nodelay, true}, {reuseaddr, true}, {active, once}]).

  5. start_server() ->
  6.   % start up the service and error out if we cannot
  7.     case gen_tcp:listen(?LISTEN_PORT, ?TCP_OPTS) of
  8.         {ok, Listen} -> spawn(?MODULE, connect, [Listen]),
  9.             io:format("~p Server Started.~n", [erlang:localtime()]);
  10.         Error ->
  11.             io:format("Error: ~p~n", [Error])
  12.     end.

  13. connect(Listen) ->
  14.     {ok, Socket} = gen_tcp:accept(Listen),
  15.     inet:setopts(Socket, ?TCP_OPTS),
  16.     % kick off another process to handle connections concurrently
  17.     spawn(fun() -> connect(Listen) end),
  18.     recv_loop(Socket),
  19.     gen_tcp:close(Socket).

  20. recv_loop(Socket) ->
  21.     % reset the socket for flow control
  22.     inet:setopts(Socket, [{active, once}]),
  23.     receive
  24.         % do something with the data you receive
  25.         {tcp, Socket, Data} ->
  26.             io:format("~p ~p ~p~n", [inet:peername(Socket), erlang:localtime(), Data]),
  27.             gen_tcp:send(Socket,"I Received " ++ Data),
  28.             recv_loop(Socket);
  29.         % exit loop if the client disconnects
  30.         {tcp_closed, Socket} ->
  31.             io:format("~p Client Disconnected.~n", [erlang:localtime()])
  32.     end.

服务器运行起
4> c(erl_tcp).
{ok,erl_tcp}
5> erl_tcp:start_server().
{{2012,2,16},{17,55,57}} Server Started.


测试 :
   telnet  0.0.0.0 9000
阅读(1031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~