erlang分布式入门(三)-TCP Server-Client

博客分类: Erlang
erlang tcp server client 

直接上代码吧!

 

1.服务端:tcp_server.erl

Erlang代码 复制代码  收藏代码
  1. -module(tcp_server).   
  2. -author('Jesse E.I. Farmer ').   
  3. -export([listen/1]).   
  4.   
  5. -define(TCP_OPTIONS, [binary, {packet, 0}, {active, false}, {reuseaddr, true}]).   
  6.   
  7. % Call echo:listen(Port) to start the service.   
  8. listen(Port) ->   
  9.     {ok, LSocket} = gen_tcp:listen(Port, ?TCP_OPTIONS),   
  10.     accept(LSocket).   
  11.   
  12. % Wait for incoming connections and spawn the echo loop when we get one.   
  13. accept(LSocket) ->   
  14.     {ok, Socket} = gen_tcp:accept(LSocket),   
  15.     spawn(fun() -> loop(Socket) end),   
  16.     accept(LSocket).   
  17.   
  18. % Echo back whatever data we receive on Socket.   
  19. loop(Socket) ->   
  20.     case gen_tcp:recv(Socket, 0) of   
  21.         {ok, Data} ->   
  22.             io:format("recv ~p~n", [Data]),   
  23.             gen_tcp:send(Socket, Data),   
  24.             loop(Socket);   
  25.         {error, closed} ->   
  26.             ok   
  27.     end.  

 

2.客户端:tcp_client.erl

Erlang代码 复制代码  收藏代码
  1. -module(tcp_client).   
  2. -export([start/1, send_data/2, close/1]).   
  3.   
  4. start(Port) ->   
  5.         {ok, Socket} = gen_tcp:connect("127.0.0.1", Port, [binary, {packet, raw}, {active, true}, {reuseaddr, true}]),   
  6.         Socket.   
  7.   
  8.   
  9. send_data(Socket, Data) when is_list(Data) orelse is_binary(Data) ->   
  10.         gen_tcp:send(Socket, Data),   
  11.         receive   
  12.                 {tcp, Socket, Bin} ->   
  13.                         io:format("recv ~p~n", [Bin]);   
  14.                 {tcp_closed, Socket} ->   
  15.                         io:format("remote server closed!~n")   
  16.         end.   
  17.   
  18. close(Socket) when is_port(Socket) ->   
  19.         gen_tcp:close(Socket).  

 

3.测试运行,需要开启两个终端,一个运行tcp_server,一个运行tcp_client,先运行tcp_server

Shell代码 复制代码  收藏代码
  1. [root@centos-183 erlang-learn]# erl   
  2. Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]   
  3.   
  4. Eshell V5.9  (abort with ^G)   
  5. 1> c(tcp_server).   
  6. {ok,tcp_server}   
  7. 2> tcp_server:listen(8080).   
  8. recv <<"abc">>  

 

在tcp_client端

Shell代码 复制代码  收藏代码
  1. [root@centos-183 erlang-learn]# erl   
  2. Erlang R15B (erts-5.9) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]   
  3.   
  4. Eshell V5.9  (abort with ^G)   
  5. 1> c(tcp_client).   
  6. {ok,tcp_client}   
  7. 2> Socket=tcp_client:start(8080).   
  8. #Port<0.2242>   
  9. 3> tcp_client:send_data(Socket,<<"abc">>).    
  10. recv <<"abc">>   
  11. ok   
  12. 4>   
 

 

你可能感兴趣的:(erlang分布式入门(三)-TCP Server-Client)