Erlang gen_udp发送数据包到ip地址?

时间:2013-02-22 01:36:03

标签: erlang udp ip-address

我尝试使用以下代码进行简单测试,以便通过Internet发送数据包。我确实检查了本地主机版本是否与以下命令一起使用它确实有效,但是如果我将localhost(127.0.0.1)替换为真实的互联网地址,那么它就不起作用了。我只是在客户端获得0并且服务器端没有任何变化,尽管使用localhost与服务器端相同。

服务器端:

udp_test:start_server().

客户方:

udp_test:client(40).

很简单但是当我用我的ip地址替换127.0.0.1时,我什么都没得到(我也关闭了防火墙)。我家网络的基本拓扑结构包括一个无线调制解调器(使用dsl),我的计算机通过无线usb卡连接。网络上还有另外两台活动计算机。我认为这可能与连接有关。

我也想知道如何修改代码以便输入udp_test:client(40,127.0.0.1). 相反,并更改客户端函数以接受udp_test中的两个参数?我尝试过简单地执行client(N,ip)并更改函数gen_udp:send(Socket, "ip",,)但是出现了无匹配子句错误。

-module(udp_test).
-export([start_server/0, client/1]).

start_server() ->
    spawn(fun() -> server(4000) end).

%% The server         
server(Port) ->
    {ok, Socket} = gen_udp:open(Port, [binary]),
    io:format("server opened socket:~p~n",[Socket]),
    loop(Socket).

loop(Socket) ->
    receive
    {udp, Socket, Host, Port, Bin} = Msg ->
        io:format("server received:~p~n",[Msg]),
        N = binary_to_term(Bin),
        Fac = fac(N),
        gen_udp:send(Socket, Host, Port, term_to_binary(Fac)),
        loop(Socket)
    end.

fac(0) -> 1;
fac(N) -> N * fac(N-1).

%% The client

client(N) ->
    {ok, Socket} = gen_udp:open(0, [binary]),
    io:format("client opened socket=~p~n",[Socket]),
    ok = gen_udp:send(Socket, "127.0.0.1", 4000, 
              term_to_binary(N)),
    Value = receive
        {udp, Socket, _, _, Bin} = Msg ->
            io:format("client received:~p~n",[Msg]),
            binary_to_term(Bin)
        after 2000 ->
            0
        end,
    gen_udp:close(Socket),
    Value.

1 个答案:

答案 0 :(得分:1)

写{127,0,0,1}而不是“127.0.0.1”。

Ip address