IP сокета, когда программа запускается в VMWare - PullRequest
1 голос
/ 11 августа 2011

Я хочу протестировать свою программу с VMWare.Итак, я запустил программу в VMWare.Использование команды ipconfig на этом компьютере дает мне некоторый IP-адрес, например 192.168.XXX.XXX.У него есть сокет сервера, прослушивающий какой-то порт с этого IP.Когда кому-то нужно поговорить с ним, он подключается к этому IP-адресу 192.168.xxx.xxx (используя Socket s = новый Socket (IP, порт)).Но когда внутри программы я вызываю socket.getInetAdress (), который должен вернуть IP 192.168.xx, он возвращает 0.0.0.0 вместо этого, и симуляция завершается неудачей.

Что я могу сделать?Спасибо заранее:)

Ответы [ 3 ]

1 голос
/ 11 августа 2011

Это проблема Java, а не проблема VMWare. Я предполагаю, что вы пытаетесь получить IP-адрес вашей машины, а не просто IP-адрес, к которому привязан сервер. В этом случае посмотрите этот вопрос для некоторых предложенных решений: java InetAddress.getLocalHost (); возвращает 127.0.0.1 ... как получить РЕАЛЬНЫЙ IP?

1 голос
/ 11 августа 2011

0.0.0.0 означает, что сокет связан со всеми доступными локальными IP-адресами, а не с конкретным IP-адресом.Это нормально для прослушивающих серверов, связанных с использованием подстановочных IP-адресов.

0 голосов
/ 11 августа 2011

Это, вероятно, потому что такие вещи, как InetAddress.getLocalHost(); получить имя хоста, а затем найти IP-адрес от него. Если ваш vm разрешает это имя хоста на localhost, вы получите 127.0.0.1. Это вероятно то, что происходит. Вам необходимо получить IP-адрес от интерфейса внешней сети.

Попробуйте запустить это:

Enumeration netInterfaces=NetworkInterface.getNetworkInterfaces();
    while(netInterfaces.hasMoreElements()){
        NetworkInterface ni=(NetworkInterface)netInterfaces.nextElement();          
        InetAddress ip=(InetAddress) ni.getInetAddresses().nextElement();
        System.out.println(ni.getName()+" "+ip.getAddress());
    }
...