网络通讯常用的有2种:文本通讯和二进制通讯。文章分别在两种方式上实现erlang与c++通讯。
一、erlang 与 c++ 行通讯
行通讯是一种文本通讯,格式如“cmd args\n”,比较简单,erlang接收数据也比较简单,可以设置参数 {packet, line} ,缺点是表示方式单一,很难表示结构数据。
1、erlang 代码(server.erl):
-module(server).
-export([start/0]).
-define( PORT, 5678).
%% 启动服务并接受客户端的连接
start() ->
{ok, LSock} = gen_tcp:listen(?PORT, [binary, {packet, line},{active, false}]),
io:format("socket listen: ~p on ~p ~n",[LSock, ?PORT]),
accept(LSock).
accept(LSock) ->
{ok, ASock} = gen_tcp:accept(LSock),
spawn(fun() -> server_loop(ASock) end),
accept(LSock).
server_loop(ASock) ->
case gen_tcp:recv(ASock, 0) of
{ok, Data} ->
io:format("recv line data: ~p~n", [Data]),
gen_tcp:send(ASock, Data),
server_loop(ASock);
{error, _} ->
{ok, recv_error}
end