我尝试使用以下代码进行简单测试,以通过 Internet 发送数据包。我确实检查了本地主机版本是否适用于以下命令并且它确实有效,但如果我用真实的互联网地址替换本地主机(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.