Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150096
  • 博文数量: 92
  • 博客积分: 2035
  • 博客等级: 大尉
  • 技术积分: 874
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-10 09:03
文章分类

全部博文(92)

文章存档

2010年(38)

2009年(54)

我的朋友

分类:

2009-11-17 16:11:55

书中的例子,非常简单的浏览器,http server的客户端
http server


-module(socket_examples).
-export([nano_get_url/0,nano_get_url/1, start_nano_server/0, nano_client_eval/1]).
-import(lists, [reverse/1]).

nano_get_url() ->
    nano_get_url("").
nano_get_url(Host) ->
    {ok, Socket} = gen_tcp:connect(Host, 80, [binary, {packet, 0}]),
    io:format("Socket is ~p~n~n", [Socket]),
    ok = gen_tcp:send(Socket, "GET / HTTP/1.0\r\n\r\n"),
    receive_data(Socket, []).
receive_data(Socket, SoFar) ->
    receive
        {tcp, Socket, Bin} ->
            receive_data(Socket, [Bin|SoFar]);
        {tcp_closed, Socket} ->
            io:format("receive data is~n~n ~p~n~n~n~n ", [SoFar]),
            B = list_to_binary(reverse(SoFar)),
%%            B = lists:reverse(SoFar),
            io:format("raw data sended is~n~n ~p~n~n~n~n", [B]),
            BB = string:tokens(binary_to_list(B), "\r\n"),
            io:format("string:~n~n ~p~n~n~n~n",[BB])
    end.
   



   
start_nano_server() ->
    {ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 4}, {reuseaddr, true}, {active, true}]),
    io:format("-1 listen is:~p~n~n", [Listen]),
    spawn(fun() -> looplisten(Listen) end).
looplisten(Listen) ->   
        io:format("----2 New process is:~p~n", [self()]),
    {ok, Socket} = gen_tcp:accept(Listen),
    spawn(fun() -> looplisten(Listen) end),
    loop(Socket), 
%%并发进程,但是如果真正并发下面代码会有问题,串行还可以正常运行,主要想看看进程是否消失!! 
    Lispid = self(),
    io:format("-8 selfis~p~n",[Lispid]),
    register(listenpid, Lispid),
    io:format("-9 self is ~p,atom listenpid is ~p ~n~n~n", [self(), whereis(listenpid)]).
loop(Socket) ->
    receive
        {tcp, Socket, Bin} ->
            io:format("-34 Server receive binary: ~p~n", [Bin]),
            Str = binary_to_term(Bin),
            io:format("-5 Server unpacked ~p~n", [Str]),
            Reply = Str*Str,
            io:format("-6 Server replying:~p~n", [Reply]),
            gen_tcp:send(Socket, term_to_binary(Reply)),
            loop(Socket);
        {tcp_closed, Socket} ->
            io:format("-7 Server socket ~p closed ~n", [Socket])
    end.
       
nano_client_eval(Str) ->
    {ok, Socket} = gen_tcp:connect("localhost", 2345, [binary, {packet, 4}]),
    ok = gen_tcp:send(Socket, term_to_binary(Str)),
    receive
        {tcp, Socket, Bin} ->
            io:format("Client receive binary : ~p~n", [Bin]),
            Val = binary_to_term(Bin),
            io:format("client result is ~p~n", [Val]),
            gen_tcp:close(Socket)
    end.
阅读(225) | 评论(0) | 转发(0) |
0

上一篇:jbpm相关文章

下一篇:万古江河

给主人留下些什么吧!~~