1

ローカルIPで機能するコードがいくつかありますが、(同じネットワークからの)非ローカルIPをリッスンしようとすると、このコードは機能しません。どうやら、私の「select」句はもう機能していません。

    while(IsReading() && IsConnected())
    {
            FD_ZERO(&lReader);
            FD_SET(GetConnection(), &lReader);

            int lHasData = select(GetConnection()+1, &lReader, NULL, NULL, NULL);

            if (lHasData > 0)
            {
                    //Accept and read socket...
            }
    }

私が言ったように、それは私自身のIPで完全に機能していますが、newtworkから他のIP /ポートをリッスンしようとすると(Asteriskサーバーであり、アクションと呼び出しの応答を受信するためにリッスンしたい)、「選択」はデータが到着しない場合のようにとどまります。

非ローカルIPのコードに何か問題がありますか?

よろしくお願いします

4

2 に答える 2

1

「同じネットワークから」であるかどうかにかかわらず、「非ローカルIPをリッスンすることはできません」。ソケットはローカルアドレスにのみバインドできます。以前のエラーを無視したに違いありません。そうでなければ、あなたの質問はひどく表現されています。

于 2012-07-03T10:03:51.957 に答える
0

通常、それは不可能です。設計上、IPをターゲットとするパケットは、そのIPを持つマシンにのみルーティングされます。そのIPをリッスンし始めたからといって、ルーターが魔法のように気を変えて、他の誰かのパケットをあなたのマシンに送信し始めることはありません。

たとえば、自分と他のマシンが、すべての人の送信をすべての人に再変換するダムハブを介して接続され、インターフェイスが無差別モードになっている場合(つまり、非ローカルをターゲットとするパケットを破棄しないように構成されている場合)、可能になる場合があります。 IP)。これを実現しようとしている場合は、両方のマシンがスイッチではなくハブに接続されていることを確認し、ネットワークインターフェイスをプロミスキャスモードに切り替える方法についてOSのドキュメントを参照する必要があります。

于 2012-07-03T10:15:54.817 に答える