Erlang gen_tcp连接仅在同一网络上工作
正如问题所述,当我设置服务器时,它可以在同一网络(不同的计算机但相同的wifi)上接收来自客户端的消息,但当客户端在另一个网络上时,它无法到达服务器,我不知道为什么它不能。有人能帮忙吗Erlang gen_tcp连接仅在同一网络上工作,erlang,gen-tcp,Erlang,Gen Tcp,正如问题所述,当我设置服务器时,它可以在同一网络(不同的计算机但相同的wifi)上接收来自客户端的消息,但当客户端在另一个网络上时,它无法到达服务器,我不知道为什么它不能。有人能帮忙吗 -module(client). -export([client/2, clientDNS/4]). client(PortNo,Message) -> IP = {1, 1, 1, 1}, % Edited for privicy {ok,Sock} = gen_tcp:connect(IP,PortN
-module(client).
-export([client/2, clientDNS/4]).
client(PortNo,Message) ->
IP = {1, 1, 1, 1}, % Edited for privicy
{ok,Sock} = gen_tcp:connect(IP,PortNo,[{active,false},{packet,1}]),
Data = term_to_binary(Message),
gen_tcp:send(Sock,Data),
{ok, A} = gen_tcp:recv(Sock,0),
gen_tcp:close(Sock),
Tmp = list_to_binary(A),
Res = binary_to_term(Tmp),
Res.
-module(server_http).
-export([start/1, server/2, loop/2]).
start(LPort) ->
case gen_tcp:listen(LPort,[{active, false},{packet,1}]) of
{ok, ListenSock} ->
start_servers(ListenSock),
{ok, Port} = inet:port(ListenSock),
Port;
{error,Reason} ->
{error,Reason}
end.
start_servers(LS) ->
Pid = setup:setupServer(),
spawn(?MODULE,server,[Pid, LS]),
ok.
server(Pid, LS) ->
case gen_tcp:accept(LS) of
{ok,S} ->
loop(Pid, S),
server(Pid, LS);
Other ->
io:format("accept returned ~w - goodbye!~n",[Other]),
ok
end.
loop(Pid, S) ->
inet:setopts(S,[{active,once}]),
receive
{tcp,S,Data} ->
Tmp = list_to_binary(Data),
case binary_to_term(Tmp) of
{Mod, Inputs} -> Answer = server:Mod(Pid, Inputs),
Res = term_to_binary(Answer),
gen_tcp:send(S,Res),
loop(Pid, S);
{Mod} -> Answer = server:Mod(Pid),
Res = term_to_binary(Answer),
gen_tcp:send(S,Res),
loop(Pid, S)
end;
{tcp_closed,S} ->
io:format("Socket ~w closed [~w]~n",[S,self()]),
ok;
_ -> loop(Pid, S)
end.
感谢您在这方面的帮助:)
原来是主机上的路由器打开了端口,但是源IP地址被设置为主机IP地址,我猜这会以某种方式将其限制为仅来自网络本身的呼叫:)远程计算机可以使用telnet访问端口吗?我敢打赌,NAT会阻止未列入白名单的端口,从而阻止
gen_tcp
愉快地连接。我当然也这么认为,但我尝试在另一个网络上打开相同的端口,以查看这是否是问题,但它没有做任何事情:/