2015-01-07 2 views
0

У меня есть простой сервер на OpenShift от Erlang, который создает сокет и ждет новых соединений. Локальный ip для сервера - 127.10.206.129, а сервер прослушивает 16000 порт. код моего сервера:Как подключиться к сокету TCP

-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). 

Сервер запускается без проблем. Я попытался запустить клиент на моем локальном хосте и был ошибка (он пытался подключиться к времени много, чем тайм-аут:

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

ответ

1

Только порты 80, 443, 8000 и 8443 открыты для внешнего мира при спусках. Вы не можете подключиться к другим портам OpenShift с локальной рабочей станции, если вы не используете команду rhc port-forward, и это будет работать только с опубликованными портами, которые используются картриджами.

0

Ваш listen вызов ограничивает прослушивания интерфейс 127.10.206.129, но, судя по второму примеру клиента, клиент не может подключиться к этому адресу Попробуйте. устранение {ip,{127,10,206,129}} от вашего звонка listen, чтобы ваш сервер прослушивал все доступные интерфейсы или выяснил, какой интерфейс соответствует имени сервера "chat-bild.rhcloud.com" и прослушивает только этот интерфейс.

Смежные вопросы