2014-02-07 5 views
1

장치의 IP 주소를 가져 오는 데 문제가 있습니다.내 장치의 IP 주소를 가져올 수 없습니다.

서버로 사용하고 클라이언트로 작동 할 다른 Android 기기에 연결하고 싶습니다.

다음은 서버 앱용으로 작성한 코드입니다.

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

그러나, 내가 다른 IP 주소를 가진 클라이언트를 통해 연결 192.168.1.2 (이다 : 나는 내 응용 프로그램을 시작할 때

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(); 
    } 
} 

은}

, 그것은 텍스트 뷰에 표시 내 장치의 설정에서 찾은).

제 질문은 : 어떻게 내 응용 프로그램에서 두 번째 IP 주소를 얻을 수 있습니까? 76ff : fe85을 :

답변

1

유이 IPv6를 LinkedLocal 와이파이 IP FE80입니다 아래

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

을 시도 :: 2254 IPv4 주소를 찾는 희망 f2bd % wlan0

+1

이했다. 고맙습니다! 귀하의 답변을 수락했지만 아직 투표 할 수 없습니다. – WWJD

+0

반가워요! 건배! – NitZRobotKoder

관련 문제