如何通过TCP连接到套接字

时间:2015-01-07 15:40:36

标签: sockets tcp erlang openshift

我在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连接?

2 个答案:

答案 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>