通过c ++与erlang服务器通信(发送二进制文件)

时间:2016-03-29 15:49:05

标签: c++ binary server erlang sfml

我一直在使用erlang,sfml和c ++开发一个项目来创建一个联网的游戏。我已经完成了来自erlang - erlang的通信并取得了一些成功,但是遇到了一些集成c ++的问题。

以前我能够以这种格式发送数据(来自'客户'):

 gen_tcp:send(Socket, term_to_binary({Cmd, Parameters}));
 gen_tcp:send(Socket, term_to_binary({Cmd, {P1, P2}, P3}));
 gen_tcp:send(Socket, term_to_binary({Cmd}));
 gen_tcp:send(Socket, term_to_binary({Cmd, Msg}));

使用案例处理数据:

client_handler(Socket) ->
io:format("Waiting for data...~n", []),

case gen_tcp:recv(Socket, 0) of  
{ok, Bin} ->
  Cmd = binary_to_term(Bin),
  io:format("Command '~p' received.~n", [Cmd]),

case Cmd of
    {register, NewAtom} ->          
        %%Do Stuff        
    {update_transform, {X,Y}, Rot} ->
        %%Do Stuff    
    {get_transform} ->
        %%Do Stuff  
    {send_message, Msg} ->
        %%Do Stuff    
    _ ->
       %%Do Stuff
  end,

client_handler(Socket);

{error, _} ->
  io:format("Lost connection to client!~n", [])
end.

有没有办法让我使用c ++这样发送数据?我意识到它只是构建二进制蜇但我不知道数据需要看什么格式直到现在它不是我有任何使用c ++的经验

提前致谢!!!

1 个答案:

答案 0 :(得分:2)

C ++ / C可以使用ei library将数据编码为Erlang术语,以通过套接字发送Erlang应用程序,并接收和解码Erlang术语。编写这样的C ++ / C应用程序是乏味的,但是一旦你掌握了基本代码,它就能很好地工作。

还可以编写一个非Erlang节点,称为C node,通过Distributed Erlang与Erlang节点通信。您可以使用JInterface package对Java执行相同的操作。对于Erlang节点,此类节点仅显示为其群集中的另一个节点。与ei应用程序一样,编写此类节点可能很繁琐,但是当您希望无缝且安全地集成到Erlang集群中的非Erlang代码时,它们可以很方便。