2011-01-17 12 views
0

で接続します。Erlangのは、私はErlangで単純なサーバーアプリケーションを作成する外部IPアドレス

このアプリケーションのコード:https://gist.github.com/783117

私は、Telnetとそれに接続しよう。私はルートから入手ローカルホストまたはローカルIP ADDRESに接続すると、それは大丈夫だが、私は外部のIPでサーバーに接続しようとすると、それは動作しませんです。

どういうところが間違っていますか?

Opts = [binary, {ip, 0,0,0,0}, {reuseaddr, true}, 
      {keepalive, false}, {active, false}], 

私が手::

例外出口:badarg

netstatの-ltn私は{0,0,0,0}とオプションを使用する場合は

| grepが110

TCP 0 0 0.0.0.0:110 0.0.0.0:*は

route -n 

Kernel IP routing table 

Destination  Gateway   Genmask   Flags Metric Ref Use Iface 

192.168.1.0  0.0.0.0   255.255.255.0 U  202 0  0 eth0 

0.0.0.0   192.168.1.1  0.0.0.0   UG 202 0  0 eth0 

ありがとうLISTEN。 gen_tcp manualから

+0

はおそらく、あなたはポートがローカルアドレスをバインド開けていますが、ポートが確認するために待機しているIPにチェックする必要があります。あなたは 'netstat -ltn | grep 110 'と' 'route -n'? –

+1

ファイアウォールは問題の可能性がある別の古典です。 –

+0

それは 'あなたのコードのように、{0,0,0,0、IP}' {IP、{0,0,0,0}} ''ではないはずです。 –

答えて

1

(ポート、オプション)聞く - > {OK、ListenSocket} | {エラー、理由}

...

は、ローカルホスト上のポートのポートをリッスンするようにソケットを設定します。

...

{IP、IP_ADDRESS()}

ホストが複数のネットワークインタフェースがある場合は、このオプションをリッスンするかを指定します。

私はあなたのサーバがローカルホストのみをリッスンしているとします。つまり、他のアドレスを使用して接続することはできません。おそらくipオプションを使用する必要があります。おそらくINADDR_ANYをC言語のように使うことは可能かもしれませんが、わかりません。

[編集]

さえipオプション(私はCRAPの答えを与えるのおかげで)せずに、デフォルトではINADDR_ANYでリッスンと思われました。 そして私は、他のマシンから、オリジナルのコードを著者が共有して接続することができます。しかし、ファイアウォールは私のマシンの代わりに

+0

すべてのインターフェイスでlistenする方法は、{0,0,0,0} 'をipとして使用しています –

+2

INADDR_ANYがデフォルトです。 –

0

で無効になっている{IPは、0,0,0,0}、あなたが渡す必要があります:{IPを、{0,0,0,0}}。 2つの要素のタプルの代わりに、5つの要素を持つタプルを渡しました。

関連する問題