我在Erlang的OpenShift上有简单的服务器,它创建套接字并等待新的连接。服务器的本地IP为127.10.206.129
,服务器侦听16000
端口。
我的服务器代码:
-module(chat).
-export ([start/0, wait_connect/2, handle/2]).
start() ->
{ok, ListenSocket} = gen_tcp:listen(16000, [binary, {ip,{127,10,206,129}}]),
wait_connect(ListenSocket, 0).
wait_connect(ListenSocket, Count) ->
io:format("~s~n", ["Wait..."]),
gen_tcp:accept(ListenSocket),
receive
{tcp, _Socket, Packet} ->
handle(Packet, Count),
spawn(?MODULE, wait_connect, [ListenSocket, Count+1]);
{tcp_error, _Socket, Reason} ->
{error, Reason}
end.
我的客户代码:
-module(client).
-export ([client/2]).
client(Host, Data) ->
{ok, Socket} = gen_tcp:connect(Host, 16000, [binary]),
send(Socket, Data),
ok = gen_tcp:close(Socket).
send(Socket, <<Data/binary>>) ->
gen_tcp:send(Socket, Data).
服务器启动没有麻烦。我尝试在我的localhost上运行客户端并出现错误(它尝试连接的时间远超过超时:
2> client:client("chat-bild.rhcloud.com", <<"Hello world!">>).
** exception error: no match of right hand side value {error,etimedout}
in function client:client/2 (client.erl, line 4)
我尝试了这种愚蠢的方式(尽管127.10.206.129是一个不正确的ip,因为它是服务器本地ip):
3> client:client({127,10,206,129}, <<"Hello world!">>).
** exception error: no match of right hand side value {error,econnrefused}
in function client:client/2 (client.erl, line 16)
如何做gen_tcp:用url连接?
答案 0 :(得分:1)
只有端口80,443,8000和8443在openshift上对外界开放。除非使用rhc port-forward命令,否则无法从本地工作站连接到OpenShift上的其他端口,并且只能使用磁带使用的已发布端口。
答案 1 :(得分:0)
您的listen
通话将监听界面限制为127.10.206.129
,但从第二个客户端示例判断,您的客户端无法连接到该地址。尝试从{ip,{127,10,206,129}}
调用中删除listen
选项,以便服务器侦听所有可用接口,或找出服务器名称"chat-bild.rhcloud.com"
对应的接口,并仅侦听该接口。< / p>