Erlang 编程之socket 单用户客户端通讯
来源:互联网 发布:ibm的人工智能 编辑:程序博客网 时间:2024/05/16 01:18
% 原文 http://blog.csdn.net/d_watson/article/details/6745479
% 修改:zidai78123@163.com
% 转载请注明原文出处
%
Erlang TCP/Socket编程Demo
初学erlang,找了很久的资料,发现一个Socket的单文件例子。可以进行客户端和服务器端通讯
该实例包括一个tcp_test.erl文件,很小,但是内容很全,适合刚入门的朋友看看,:
-module(tcp_test) 单个文件。
start_server() %开启服务 监听127.0.0.1:9999端口
client() % 测试socket通信
message_tcp("message") % 带内容的socket 测试接口函数
本人也是初学Erlang,本程序技术层级较低。高手可以直接飘过。
erlang 的 socket服务框架:
client()
//gen_tcp:connect() 连接端口
//gen_tcp:send() send message.
//gen_tcp:recv() recvieve message.
//gen_tcp:close(Socket) close prosess.
start_server()
//gen_tcp:listen() 监听端口
//gen_tcp:accept(ListenSocket) 接受
//and其他
---------------------------------
---------------------------------
Server端结果:
D:\temp\socket>erl
Eshell V5.9.1 (abort with ^G)
1> c(tcp_test).
{ok,tcp_test}
2> tcp_test:start_server().
received request message <<"erlang client sending message">>
socket close
ok
Erlang client 端结果:[/b]
D:\temp\socket>erl
Eshell V5.9.1 (abort with ^G)
1> tcp_test:client().
result: <<"process successful">>
ok
2> tcp_test:message_tcp("this is the first tcp_tes at").
result: <<"process successful">>
ok
源码
tcp_test.erl
--------------------------------
-module(tcp_test).
-export([start_server/0, client/0, message_tcp/1, accept/1]).
start_server()->
{ok, ListenSocket}=gen_tcp:listen(9999,[binary,{active,false}]),
accept(ListenSocket).
accept(ListenSocket)->
{ok,Socket} = gen_tcp:accept(ListenSocket),
spawn(?MODULE, accept,[ListenSocket]),
process_request(Socket).
process_request(Socket)->
case gen_tcp:recv(Socket,0,5000) of
{ok,Binary}->
io:format("received request message ~p~n", [Binary]),
gen_tcp:send(Socket, "process successful"),
process_request(Socket); %尾递归,No死循环
{error, closed}->
io:format("socket close ~n");
_Req->
io:format("receive ~p~n", [_Req])
end.
client()->
{ok,Socket}=gen_tcp:connect({127,0,0,1},9999,[binary,{packet,0},{active,false}]),
gen_tcp:send(Socket, "erlang client sending message"),
case gen_tcp:recv(Socket,0,5000) of
{ok,Binary}->
io:format("result: ~p~n", [Binary]);
_Req->
io:format("unknow receive ~p~n", [_Req])
end,
ok = gen_tcp:close(Socket).
message_tcp(X)->
{ok,Socket}=gen_tcp:connect({127,0,0,1},9999,[binary,{packet,0},{active,false}]),
gen_tcp:send(Socket, X),
case gen_tcp:recv(Socket,0,5000) of
{ok,Binary}->
io:format("result: ~p~n", [Binary]);
_Req->
io:format("unknow receive ~p~n", [_Req])
end,
ok = gen_tcp:close(Socket).
- Erlang 编程之socket 单用户客户端通讯
- erlang 趣事之 socket通讯
- Linux编程之服务器与客户端的socket通讯机制
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket相关知识
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket模型使用
- Socket之服务器和客户端通讯
- Android 客户端socket通讯
- C++ socket编程 实现服务端与客户端的通讯
- socket编程 实现服务端与客户端的通讯
- C++ socket编程 实现服务端与客户端的通讯
- C++ socket编程 实现服务端与客户端的通讯
- C++ socket编程 实现服务端与客户端的通讯
- C++ socket编程 实现服务端与客户端的通讯
- Erlang 的Socket编程
- C# Socket异步通讯客户端之发送数据
- Android开发笔记:Socket通讯之Tcp客户端
- socket 通讯编程手册
- socket 通讯编程手册
- ArcToolbox使用之一——Analysis Tools
- 获取系统串口号
- birt报表生成阶段事件
- MemSQL Architecture - The Fast (MVCC, InMem, LockFree, CodeGen) And Familiar (SQL)
- 技术-Antlr
- Erlang 编程之socket 单用户客户端通讯
- 在Android4.0中Contacts拨号界面分页方式剖析
- This指针
- inline-block 前世今生
- .net事件和委托
- vb事件处理过程内部结构
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- eclipse代码快速补全设置
- Hello World!