server.erl
- -module(server).
- -export([start/0,start/1,process/1]).
- -define(defPort, 8888).
-
- start() -> start(?defPort).
-
- start(Port) ->
- case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
- {ok, LSock} -> server_loop(LSock);
- {error, Reason} -> exit({Port,Reason})
- end.
-
- %% main server loop - wait for next connection, spawn child to process it
- server_loop(LSock) ->
- case gen_tcp:accept(LSock) of
- {ok, Sock} ->
- spawn(?MODULE,process,[Sock]),
- server_loop(LSock);
- {error, Reason} ->
- exit({accept,Reason})
- end.
-
- %% process current connection
- process(Sock) ->
- Req = do_recv(Sock),
- Resp = "Hello, " ++ Req ++ "!",
- do_send(Sock,Resp),
- gen_tcp:close(Sock).
-
- %% 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.
client.rb
- require 'socket'
-
- client = TCPSocket.open('localhost', 8888)
- client.send("hideto", 0)
- puts client.readlines
- client.close
Erlang服务器编译运行:
- Eshell > c(server.erl).
- Eshell > server:start().
Ruby客户端解释运行:
- > ruby client.rb
- Hello, hideto!
-
|
请发表评论