技术开发 频道

Erlang与Python间的socket通讯

  【IT168 技术文档】Erlang与Python间的socket通讯

  Server 端:

  -module(eserver).   -author("hanzhupeng@gmail.com").   -export([startd/0, start/0,start/1,process/1]).   -define(defPort,2000).   startd() ->   register(eserverp, spawn(?MODULE, start, [])).   start() -> start(?defPort).   start(Port) ->   case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of   {ok, LSock} -> server_loop(LSock);   {error, Reason} -> exit()   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()   end.   %% process current connection   process(Sock) ->   Req = do_recv(Sock),   Resp = "hello world",   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.

  Python Client端

  import socket   HOST = 'localhost' # The remote host   PORT = 6889 # The same port as used by the server   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   s.connect((HOST, PORT))   s.send('Hello, world')   data = s.recv(1024)   s.close()   print 'Received', repr(data)
0
相关文章