-1

私はこの単純なサーバーコードを持っています:

public class Server {

 public static void main(String[] args) {

    try {
        ServerSocket sSocket = null;
        int serverPort = 57293;
        try {

            sSocket = new ServerSocket(serverPort);
            Socket userSocket = sSocket.accept();
            System.out.println(userSocket.getInetAddress().toString());

        } catch (IOException listenEX) {
            System.out.println("Could not listen on port: " + serverPort);
        }

        sSocket.close();
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
      }
    }

 }

サーバーはポート57293とIPでリッスンします0.0.0.0

1 つの接続を待つだけで、クライアントの IP アドレスが出力されます。クライアントコードは次のとおりです。

 public class Client {

public static void main(String[] args) throws IOException {

    Socket serverSocket = new Socket("192.168.217.1", 57293); 
    DataInputStream in = new DataInputStream(serverSocket.getInputStream());
    DataOutputStream out = new DataOutputStream(serverSocket.getOutputStream());

    }
 }

クライアント内のサーバーIPとして、コンピューターのローカルIPを入力します。そうする場合、サーバーは結果として同じIPを出力します。/192.168.217.1

それ以外の場合、クライアントのコードで行を変更した場合

Socket serverSocket = new Socket("192.168.217.1", 57293);Socket serverSocket = new Socket("127.0.0.1", 57293);

サーバーのIPを変更したところ、サーバーは127.0.0.1IPをクライアントのIPアドレスに出力します。

ここで何が起こっているのかわかりません。サーバーはクライアントの IP アドレスではなく、それ自体のアドレスを出力しているようです。

どうすればこれを回避できますか? 192.168.217.1クライアントもローカルで実行されている場合は、サーバーに印刷させたいと思います

4

1 に答える 1

0

127.0.0.1 はループバック アドレスです。そのホストの内部からのみ表示されます。クライアントが接続できる唯一の方法は、それ自体を使用することです。したがって、ソース アドレスとターゲット アドレスは同じになります。

なぜこれがあなたにとって問題なのか理解できません。127.0.0.1 は、ホストの外部 IP が何であるかに関係なく、常にローカル ホストを意味します。得られる結果に問題はありません。これは完全に有効な IP アドレスであり、クライアントを正しく識別します。

于 2013-01-13T02:55:54.347 に答える