私はP2Pアプリケーションを開発しており、そのノードをクライアントとサーバーの両方として機能させたいと考えています。例えば、私はゴルーチンで実行されている次のコードでリスニングノードを確立することを言う:聞いている同じポートからのダイヤルアドレス
ln, _ := net.Listen("tcp", ":8080")
for {
conn, err := ln.Accept()
.....
}
その後、別のゴルーチンにロジックが、それは言う、それはその存在を知っているように別のノードに連絡しなければならないことを決定しましたローカルホストアドレス ":8081"にも同様のリスニングループが実行されています。私はちょうどnet.Dial("tcp", ":8081")
を使用する場合は
は、それから接続するためのポート番号をランダムに選択し、8081
上のノードは8080
に正しいのではなく、そのポートに連絡しようとします。 8080
からnet.Dial
コールを開始する方法はありますか?そのようなことも許されているのですか、またはリスナーが混乱して、net.Dial
によって返されたソケット用の通信を傍受しますか?
を使用することができますか?あなたはソケットが双方向性であることを認識していますか?あるいは、各ノードがそれらの間に2つの接続を持つ必要がある、さらに複雑なことが起こっていますか? –
どのポートから発信するのが重要なのですか? – Adrian
新しいノードが起動すると、pingに必要なアドレスのリストが作成されます。彼らがあなたに連絡する前に最初にそれらのノードにpingする必要があります – jeanluc