1


Je développe une application mobile dans android.
Ici, je veux détecter l'adresse IP de l'ordinateur, système, etc après la connexion USB de tout téléphone Android
Je ne trouve pas la solution.
Si je mets le code suivant, alors il prend la seule l'adresse IP du téléphone, j'ai besoin l'adresse IP du systèmeComment obtenir l'adresse IP du système après la connexion USB de téléphone Android?

Voici le code

ArrayList<InetAddress> arrayList=new ArrayList<InetAddress>(); 

     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(); 
        arrayList.add(inetAddress); 
        inetAddress=null; 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e("SALMAN", ex.toString()); 
     } 
     return arrayList; 


S'il vous plaît aidez-moi à obtenir l'adresse IP du système Si nous ne pouvons pas obtenir les moyens, veuillez me mentionner. Parce que je suis nouveau à android.


J'utilise android 1.6.


Il existe une application côté serveur dans le système Windows XP. Cette application est un service Windows développé par C# .net. Ce service Windows écoute un port tel que 234, etc. Si certaines données arrivent sur le port, il traitera les données et enverra une réponse via ce port.


Dans Android l'application android est envoyer les données au service Windows via socket.
Le téléphone Android est connecté au système Windows dans lequel le service Windows est en cours d'exécution. Le système suppose que le téléphone Android est un modem et une adresse IP supplémentaire est générée pour le système.Cette adresse IP est générée dynamiquement lorsque le téléphone Android est connecté.
Pour le transfert de données mobile vers le système via socket .J'aurai besoin de donner l'adresse IP du système (après attachement) dans mon codage android.
S'il existe une méthode de codage Android pour obtenir cette adresse IP.
Tous sont s'il vous plaît donner vos idées sur ce sujet.

+0

De quel 'système voulez-vous l'adresse IP? Veuillez garder à l'esprit que vous devez considérer que l'adresse IP est relative à d'autres 'systèmes'. Lors de la connexion, il y a de grandes chances que plusieurs adresses IP existent pour n'importe quel périphérique de la chaîne - IP interne et externe.Que voulez-vous faire avec l'adresse IP que vous souhaitez trouver? – mbanzon

+0

Cher mbanzon, je veux transférer des données entre mobile et le système (qui est tithered) via une connexion socket dans android. –

+0

Je ne pense pas que la connexion USB entre le téléphone et l'ordinateur permet des connexions socket. Vous devez ignorer la partie tethering à mon avis - et plutôt regarder comment faire des transferts USB avec Android. La solution dépend de ce que vous voulez transférer et du type d'application que vous faites. Peut-être qu'un simple transfert de fichiers via un stockage USB monté suffit? – mbanzon

Répondre

6

Il n'est pas possible de trouver l'adresse IP créée dans le PC à partir d'android après la connexion. Il n'y a pas d'API ou autre moyen de le trouver.

Si vous utilisez InetAddress, il retournera 192.168.42.129 - qui est une adresse DHCP créée par USB Tethering. Cela ne vous aidera pas à communiquer.

L'autre façon est de scanner la liste des adresses IP. USB Tethering va créer une adresse IP allant de 192.168.42.1 à 192.168.42.255. Vous pouvez écrire un scanner simple pour trouver celui qui est actif. Mais cela prendra du temps.

+0

Merci pour votre idée droid dev –

+3

Ou utilisez simplement/proc/net/arp :) –

1

Merci à 'Swim N Swim' ci-dessus. J'ai trouvé un code à Retrieve IP and MAC addresses from /proc/net/arp (Android)

et modifié un bit pour obtenir le premier IP ayant une adresse MAC valide. Fonctionne très bien lors du développement en tant qu'utilisateur unique sur votre PC avec attache. Vous pouvez suivre lien ci-dessus pour plus d'adresses IP sélectifs en fonction du nom de l'entreprise, etc.

public static String getUSBThetheredIP() { 

    BufferedReader bufferedReader = null; 
    String ips=""; 

    try { 
     bufferedReader = new BufferedReader(new FileReader("/proc/net/arp")); 

     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
      String[] splitted = line.split(" +"); 
      if (splitted != null && splitted.length >= 4) { 
       String ip = splitted[0]; 
       String mac = splitted[3]; 
       if (mac.matches("..:..:..:..:..:..")) { 
        if (mac.matches("00:00:00:00:00:00")) { 
         //Log.d("DEBUG", "Wrong:" + mac + ":" + ip); 
        } else { 
         //Log.d("DEBUG", "Correct:" + mac + ":" + ip); 
         ips = ip; 
         break; 
        } 
       } 
      } 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally{ 
     try { 
      bufferedReader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return ips; 
} 

Notez que chaque fois que vous attache après untether, vous devez commencer votre apache ou d'autres processus sur PC pour prendre de nouvelles IP efficace. C'est ce que j'ai vécu.

Questions connexes