0

私はネットワーク プログラミングが初めてなので、これが本当に正しい質問かどうかはわかりませんが、C++ でサーバー プログラムを作成したいと考えています (私は Qt を使用しています)。「フォーチュン サーバー」の例を使用しました。サーバーが表示するIPアドレスを入力することで、クライアントに接続できるシンプルなサーバーを作成します。localhost (127.0.0.1) と入力すると接続できますが、サーバーが実行しているアドレスは 169.254.253.67 であり、これが別のローカル アドレスであることがわかりました (それに接続することもできません)。サーバーを実行しているので、ローカルアドレスではありませんか?

私が使用する例は次のとおりです。 http://doc.qt.digia.com/qt/network-fortuneserver.html

4

1 に答える 1

1

サーバーの実装は、検出されたすべての IP アドレスのリストを取得し、最初の非ローカル IP を見つけます。それ以外の場合は、デフォルトで localhost を使用します。ローカル ホスト アドレスが表示されている場合は、ネットワークに何かが正しく設定されておらず、Qt が LAN IP を特定できなかったことを示しています。

コメントで @drescherjm が示唆しているように、すべてのインターフェイスで明示的にリッスンできます0.0.0.0ipAddressこれを実際に確認するには、次の文字列でステータス ラベルを設定する直前に行を追加する必要があります。

// add this to force the socket to listen on all interfaces
ipAddress = QHostAddress("0.0.0.0").toString();
// or if you have a local static ip and want to be explicit
// ipAddress = QHostAddress("192.168.xxx.xxx").toString();

// followed by the already existing line for setting the text
statusLabel->setText(tr("The server is running on\n\nIP: %1\nport: %2\n\n"
                        "Run the Fortune Client example now.")
                     .arg(ipAddress).arg(tcpServer->serverPort()));

ネットワークが正しく設定されていれば、サーバー アプリを実行しているコンピューターを認識できる他のコンピューターは、指定されたポートに接続できるはずです。

于 2013-01-08T01:12:32.163 に答える