2014-02-07 2 views
1

У меня возникла проблема с получением IP-адреса устройства.Не удается получить IP-адрес устройства

Я хочу использовать его в качестве сервера и подключить его к другому устройству Android, которое будет действовать как клиент.

Вот код, который я написал для серверного приложения.

public class ServerActivity extends Activity { 

private TextView serverStatus; 

// DEFAULT IP 
public static String SERVERIP = "10.0.2.15"; 

// DESIGNATE A PORT 
public static final int SERVERPORT = 8080; 

private Handler handler = new Handler(); 

private ServerSocket serverSocket; 

private EditText serverMessage; 

String str=""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    serverStatus = (TextView) findViewById(R.id.TextView01); 
    serverMessage = (EditText) findViewById(R.id.TextView02); 

    SERVERIP = getLocalIpAddress(); 

    Thread fst = new Thread(new ServerThread()); 
    fst.start(); 
} 


public class ServerThread implements Runnable { 

    public void run() { 
     try { 
      if (SERVERIP != null) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Listening on IP: " + SERVERIP); 
        } 
       }); 
       serverSocket = new ServerSocket(SERVERPORT); 
       while (true) { 
        Socket client = serverSocket.accept(); 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Connected."); 
         } 
        }); 

        try { 
         BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
         String line = null; 

         while ((line = in.readLine()) != null) { 
          str = line; 
          Log.d("ServerActivity", line); 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            serverMessage.setText(str); 
           } 
          }); 
         } 
         break; 
        } catch (Exception e) { 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones."); 
          } 
         }); 
         e.printStackTrace(); 
        } 
       } 
      } else { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Couldn't detect internet connection."); 
        } 
       }); 
      } 
     } catch (Exception e) { 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        serverStatus.setText("Error"); 
       } 
      }); 
      e.printStackTrace(); 
     } 
    } 
} 

private String getLocalIpAddress() 
{ 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        return inetAddress.getHostAddress().toString(); 
       } 
      } 
     } 
    } catch (SocketException ex) { 
     return "ERROR Obtaining IP"; 
    } 
    return "No IP Available"; 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    try { 
     serverSocket.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

Когда я начинаю мое заявление, он показывает на текст ракурса:

"Listening on IP: fe80::2254:76ff:fe85:f2bd%wlan0". 

Однако я подключиться через клиент с другим IP-адресом, который является 192.168.1.2 (который я нашел в настройках моего устройства).

Мой вопрос: как я могу получить этот 2-й IP-адрес в своем приложении?

ответ

1

надеюсь, что у ищет адреса IPv4 попробуйте ниже

   boolean isIP4Address = inetAddress instanceof Inet4Address; 
      if (!inetAddress.isLoopbackAddress() && isIP4Address) { 
       String Ipv4  = inetAddress.getHostAddress(); 
        //Ipv4 = 192.168.1.2  
        } 

Это Ipv6 LinkedLocal WiFi IP fe80 :: 2254: 76ff: fe85: f2bd% wlan0

+1

Это работало. Спасибо! Я принял ваш ответ, но не могу его проголосовать. – WWJD

+0

Приятно слышать! Ура! – NitZRobotKoder

Смежные вопросы