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)