IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Communication socket hors réseau local


Sujet :

API standards et tierces Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut Communication socket hors réseau local
    Bonjour j'aimerais faire un programme client-serveur avec des socket
    reliant 2 smartphone
    j'y arrive dans un réseau local et j'aimerais transférer des données indépendamment du type de connection (Wifi ou 3G)
    j'ai récupéré l'ensemble des interfaces réseaux puis l'ensemble des ip d'un smartphone mais je ne sais pas comment les utiliser pour la connection via les socket
    Merci de votre aide et de vos suggestion .

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Alors quelqu'un sait comment faire ?
    au pire si c'est impossible dites moi

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui je sais comment faire.

    Et il y a un tutoriel ici-même:
    http://gfx.developpez.com/tutoriel/java/network/
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Bonjour
    et merci de ta réponse ,
    je vais poster mon code ,peut être que tu verra mon erreur
    je précise que mon smartphone est le serveur et lorsque j'effectue ce code sur le réseau wifi local ,sa marche..

    lorsque je me déconnecte du wifi j'utilise l'ip de mon téléphone en mode connection 3G et sa ne marche pas ..
    merci encore de ton aide.


    Serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
     
    public class MainActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		Button btn = (Button)findViewById(R.id.button1);
    		btn.setOnClickListener(new View.OnClickListener() {
     
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				Thread thread = new Thread(new Runnable(){
     
    					@Override
    					public void run() {
    						// TODO Auto-generated method stub
    						Log.v("Thread","Dedans");
    						Socket socket;
    						BufferedReader bis;
    						try{
    							socket = new ServerSocket(6666).accept();
    							Log.v("Connection","Effectué !");
    							bis = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    							String blabla = bis.readLine();
    							Log.v("Mot","" + blabla);
    							socket.close();
    						}catch (UnknownHostException e) {
     
    				            e.printStackTrace();
    				        }
    					    catch (FileNotFoundException e) {
    					        e.printStackTrace();
    					    } catch (IOException e) {
    					        e.printStackTrace();
    					      }  
    					}
     
    				});
    				thread.start();
    			}
    		});
    	}
    et voici mon code Client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
     
    public class Client {
     
    	public static void main(String[] args){
     
    		Socket socket;
    		ObjectOutputStream out;
    		PrintWriter print;
     
    		//envoi sur le reseau
    		try {
     
    			socket = new Socket("10.7.49.237",6666);
    			System.out.println("Connection effectué");
    			print = new PrintWriter(socket.getOutputStream());
    			print.write("Sa marche");
     
    			print.flush();
    			socket.close();
     
    		}catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    "Ça marche pas" , ça veux rien dire !

    Quel sont les exceptions / erreurs retournées dans le Logcat ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    ok
    en fait il n'y a pas d'erreur dans le logcat c'est plutôt au niveau de mon client qu'il y a un exception dans la console
    j'ai l'impression que quelque chose empêche la connection au téléphone ..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    java.net.ConnectException: Connection timed out: connect
    	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    	at java.net.PlainSocketImpl.connect(Unknown Source)
    	at java.net.SocksSocketImpl.connect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.connect(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at java.net.Socket.<init>(Unknown Source)
    	at Client.main(Client.java:27)

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Remplaces tous les e.printStackTrace(); par de vrais "Log.e("Client","Erreur dans xxxx",e); et tu auras les erreurs dans le logcat.

    Ben voilà, tu as tout compris...

    A quoi correspond "10.7.49.237" ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Bonjour
    j'ai fais ce que tu m'a demandé en modifiant par un Log.e
    mais il n'y a pas d'erreur dans le logcat
    je pense que le téléphone attend une connection .. vu que accept() est bloquante ,je pense que mon PC n'arrive pas a le trouver sur le réseau ,c'est peut être une histoire de routage ? je sais pas


    et 10.7.49.237 correspond a l'adresse ip de mon téléphone lorsque je suis connecté en 3G je l'ai obtenu dans une autre application via ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public static String getIPAddress(boolean useIPv4) {
            try {
                List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
                for (NetworkInterface intf : interfaces) {
                    List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
     
                    for (InetAddress addr : addrs) {
                        if (!addr.isLoopbackAddress()) {
                            String sAddr = addr.getHostAddress().toUpperCase();
     
                            boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); 
                            if (useIPv4) {
                                if (isIPv4) 
                                    return sAddr;
                            } else {
                                if (!isIPv4) {
                                    int delim = sAddr.indexOf('%'); // drop ip6 port suffix
                                    return delim<0 ? sAddr : sAddr.substring(0, delim);
                                }
                            }
                        }
                    }
                }
            } catch (Exception ex) { } // for now eat exceptions
            return "";
        }

  9. #9
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non... 10.x.y.z est une adresse privée, donc non routable... le seul moyen de communiquer avec cette adresse est d'être sur le même réseau qu'elle.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    En fait, rien n'oblige un FAI 3G de proposer une IP v4 routable... Le résultat sera souvent une adresse privée (10.0.0.0/8, 172.16.0.0/12, ou 192.168.0.0/16), "NATée" a travers les routeurs du FAI.
    Bref, impossible à joindre de l'extérieur.

    Pour joindre "directement" un téléphone il y a deux façons:
    * Utiliser le WiFi Direct (les deux éléments sont alors sur le même "réseau privé")
    * Laisser le téléphone initier la connexion avec un serveur (bien accessible depuis l'internet).

    Le code de récupération prend la première interface IPv4 qui n'est pas 'locale'... mais rien ne dit que le téléphone a une telle adresse (cela peut être IPv6 seulement), ou une seule telle adresse (avec un VPN actif, on peut avoir plusieurs adresses, dont certaines sont 'routables' d'autres non).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    ok
    merci pour la réponse
    sinon j'ai essayé un autre modèle.
    j'ai récupéré l'adresse ip de ma box sur le site http://myip.dk/ et j'ai configuré un hôte DMZ sur mon PC
    me permettant ainsi d'envoyer des données entre mon téléphone et mon PC hors réseau local.( le PC étant le serveur et le téléphone le client )

    en me connectant a ce site avec mon téléphone j'obtiens l'adresse : 92.90.20.57
    bon je pense que j'arive a la fin de mon expérience mais on ne sait jamais.

    pensez vous qu'il est possible de faire une manipulation quelconque pour envoyer des données sur mon téléphone
    la si vous n'avez pas de solution c'est pas grave j'abandonne

    PS: je précise que j'ai modifié le code pour recevoir toute les interfaces réseau de mon téléphone puis les adresses ip qui leurs sont raccordés mais je ne suis jamais tombé sur 92.90.20.57

  12. #12
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Sans utiliser de DMZ (qui est un gouffre béant de sécurité) il suffit de "forwarder" un port fixe de la box sur le port qui va bien coté PC.

    Si l'IP n'est pas fixe, il y a moyen d'utiliser un nom de domaine (qui se mettra à jour à tout changement d'IP).

    Le téléphone est sur le réseau du provider, comme un PC est sur le réseau domestique derrière une box....

    Le PC n'a connaissance que de ses propres adresses IPs (par exemple 192.168.0.4, avec une box en 192.168.0.1)... La box est la seule à avoir une adresse "publique" (par exemple 92.90.20.57).
    Quand le PC se connecte à l'extérieur, la box le détecte, et transforme le 192.168.0.4:4567 (par exemple) d'origine en 92.90.20.57:18991. Quand les paquets reviennent c'est pour 92.90.20.57:18991, la box n'a alors plus qu'à retraduire le paquet dans l'autre sens pour que le PC le recoive.

    Ouvrir un DMZ c'est dire à la box: et pour les paquets dont tu ne sais que faire, et bien forward les tous à telle machine (autrement dit, 0 protection, il faut avoir un TRES bon firewall sur le PC).

    Forwarder un port sur le box revient à dire "quand tu recois un paquet pour tel port, alors il faut TOUJOURS l'envoyer à telle machine sur tel autre port).

    Donc... vu du PC, il n'y a qu'une adresse IP: 192.168.0.4
    vu de l'Internet, il n'y a aussi qu'une adresse IP: 92.90.20.57

    Pareil pour le téléphone.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 28
    Points
    28
    Par défaut
    Ok ok
    merci

Discussions similaires

  1. Oracle et SBS 2008 : accès distant (hors réseau local)
    Par Stong dans le forum Connexions aux bases de données
    Réponses: 2
    Dernier message: 21/08/2014, 17h32
  2. Connection socket Java-Android hors réseau local
    Par amath1 dans le forum Développement
    Réponses: 2
    Dernier message: 16/03/2013, 23h27
  3. Scanner réseau local avec MFC + sockets
    Par LuffyyffuL dans le forum MFC
    Réponses: 11
    Dernier message: 26/04/2012, 16h48
  4. Connecter Access et Mysql hors d'un réseau local
    Par jojolv dans le forum Installation
    Réponses: 2
    Dernier message: 13/11/2008, 11h14
  5. probleme de communication sur réseau local
    Par ta-net dans le forum Administration
    Réponses: 5
    Dernier message: 28/12/2006, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo