Erlang与Python间的socket通讯

Erlang与Python间的socket通讯
[/url]
更新时间:2008-01-25 作者:CSDN    来源:CSDN本文关键词:   
[url=http://www.builder.com.cn/files/list-0-0-77876-1-1.htm]通讯
  
socket
  
python
  
Erlang
  
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)