httpd.erl
%% httpd.erl – MicroHttpd
-module(httpd).
-author(\”ninhenry@gmail.com\”).
-export([start/0,start/1,start/2,process/2]).
-import(regexp,[split/2]).
-define(defPort,8888).
-define(docRoot,\”public\”).
start() -> start(?defPort,?docRoot).
start(Port) -> start(Port,?docRoot).
start(Port,DocRoot) ->
case gen_tcp:listen(Port, [binary,{packet, 0},{active, false}]) of
{ok, LSock} -> server_loop(LSock,DocRoot);
{error, Reason} -> exit({Port,Reason})
end.
%% main server loop – wait for next connection, spawn child to process it
server_loop(LSock,DocRoot) ->
case gen_tcp:accept(LSock) of
{ok, Sock} ->
spawn(?MODULE,process,[Sock,DocRoot]),
server_loop(LSock,DocRoot);
{error, Reason} ->
exit({accept,Reason})
end.
%% process current connection
process(Sock,DocRoot) ->
Req = do_recv(Sock),
{ok,[Cmd|[Name|[Vers|_]]]} = split(Req,\”[ \\r\\n]\”),
FileName = DocRoot ++ Name,
LogReq = Cmd ++ \” \” ++ Name ++ \” \” ++ Vers,
Resp = case file:read_file(FileName) of
{ok, Data} ->
io:format(\”~p ~p ok~n\”,[LogReq,FileName]),
Data;
{error, Reason} ->
io:format(\”~p ~p failed ~p~n\”,[LogReq,FileName,Reason]),
error_response(LogReq,file:format_error(Reason))
end,
do_send(Sock,Resp),
gen_tcp:close(Sock).
%% construct HTML for failure message
error_response(LogReq,Reason) ->
\”<html><head><title>Request Failed</title></head><body>\\n\” ++
\”<h1>Request Failed</h1>\\n\” ++ \”Your request to \” ++ LogReq ++
\” failed due to: \” ++ Reason ++ \”\\n</body></html>\\n\”.
%% send a line of text to the socket
do_send(Sock,Msg) ->
case gen_tcp:send(Sock, Msg) of
ok -> ok;
{error, Reason} -> exit(Reason)
end.
%% receive data from the socket
do_recv(Sock) ->
case gen_tcp:recv(Sock, 0) of
{ok, Bin} -> binary_to_list(Bin);
{error, closed} -> exit(closed);
{error, Reason} -> exit(Reason)
end
运行时在httpd.erl本地建一个public目录,public目录里放一个index.html文件
然后httpd:start()启动服务器,就可以访问http://localhost:8888/index.html了
您可能感兴趣的文章:Go/Python/Erlang编程语言对比分析及示例代码python读取excel表格生成erlang数据Erlang中的Record详解Erlang初学:Erlang的一些特点和个人理解总结CentOS 6.5源码安装Erlang教程ERLANG和PYTHON互通实现过程详解