2017-09-20 10 views
-1

私はP2Pアプリケーションを開発しており、そのノードをクライアントとサーバーの両方として機能させたいと考えています。例えば、私はゴルーチンで実行されている次のコードでリスニングノードを確立することを言う:聞いている同じポートからのダイヤルアドレス

ln, _ := net.Listen("tcp", ":8080") 
for { 
    conn, err := ln.Accept() 
    ..... 
} 

その後、別のゴルーチンにロジックが、それは言う、それはその存在を知っているように別のノードに連絡しなければならないことを決定しましたローカルホストアドレス ":8081"にも同様のリスニングループが実行されています。私はちょうどnet.Dial("tcp", ":8081")を使用する場合は

は、それから接続するためのポート番号をランダムに選択し、8081上のノードは8080に正しいのではなく、そのポートに連絡しようとします。 8080からnet.Dialコールを開始する方法はありますか?そのようなことも許されているのですか、またはリスナーが混乱して、net.Dialによって返されたソケット用の通信を傍受しますか?

+1

を使用することができますか?あなたはソケットが双方向性であることを認識していますか?あるいは、各ノードがそれらの間に2つの接続を持つ必要がある、さらに複雑なことが起こっていますか? –

+0

どのポートから発信するのが重要なのですか? – Adrian

+0

新しいノードが起動すると、pingに必要なアドレスのリストが作成されます。彼らがあなたに連絡する前に最初にそれらのノードにpingする必要があります – jeanluc

答えて

0

あなたがダイヤルアウト時にローカルポートを制御するために探しているなら、あなたは相手があなたに接続するとき、あなたはそのソケットのリモートポートに戻って接続しよう、だから、net.DialTCP

+0

リスナーと同じポートを使用している場合残念ながらそれは動作しません。エラー: 'bind:アドレスはすでに使用中です' – jeanluc

関連する問題