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

Entrée/Sortie Java Discussion :

RMI via Internet


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut RMI via Internet
    Bonjour,

    Je developpe une appli client/serveur avec des RMI et je rencontre un problème lorsque j'essaye de faire des test.

    - En réseau local, pas de problème, l'appli tourne bien
    - Via internet, le client rencontre une erreur:
    java.rmi.ConnectException: Connection refused to host xxx.xxx.xxx.xxx;

    J'ai essayé de rajouter un fichier de politique de sécurité côté client et côté serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("java.security.policy","Server.policy");
    avec dans le fichier policy:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    grant{
    permission java.security.AllPermission;
    };
    Par contre, je n'arrive pas à savoir si java prend en compte ce fichier, vu que si je fais une erreur dans le nom de fichier, il ne leve pas d'exception.

    Pour info, j'ai redirigé le port d'écoute vers le serveur, donc l'erreur ne viens pas de là.
    Au cas où, je vous met le code RMI côté client et serveur:

    Serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Registry registry;
    //On crée le registry sur le port 18500
    registry = LocateRegistry.createRegistry(18500);
    welcomeMessage();
    Plateau stub;
    PlateauImpl service = new PlateauImpl();
    stub = (Plateau) UnicastRemoteObject.exportObject(service,0);
    registry.rebind("Plateau", stub);
    Client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Registry registry = LocateRegistry.getRegistry("xxx.xxx.xxx.xxx",18500);
    this.plateau = (Plateau)registry.lookup("Plateau");
    Voila, merci à ceux qui pourront m'aider

  2. #2
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Question toute bête, mais depuis la machine hébergeant le client, as-tu vérifié l'accès réseau vers le serveur par un bon vieux "telnet ip port" ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Question bête mais tellement efficace...
    Non je n'avais pas essayé parce que ça fait une semaine que j'avais demandé à l'admin de me permettre d'accéder au serveur sur ce port...

    Naïf que je suis, et fainéant d'informaticien (oui j'en suis un, mais je reconnais être fainéant).

    En tous cas merci de ton aide, j'étais en train de me prendre la tête pour rien.

    Sujet clos.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Le fait que t'as changé le nom du fichier et il a rien dit, alors là, tu as oublié de mettre le : System.setSecurityManager(new RMISecurityManager()); dans le code du client.
    J'avais eu le même problème que toi mais voilà je te présente ma version de solution.

    coté 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
     
    public static boolean connect(String profil, String login, String mdp){
    		IAnnuaire rmiStub = null;
    		boolean reponse   = false;
    		try {
    			// Rmi policy
    			System.setProperty("java.security.policy", 
    					"D:/Mes Documents/Eclipse Project/Annuaire/src/com/annuaire/rmi/security.policy");
    			// Rmi Security Manager
    			System.setSecurityManager(new RMISecurityManager());
    			// Charger l'objet
    			rmiStub = (IAnnuaire) Naming.lookup("rmi://localhost/RemoteAnnuaire");
    			// Vérifie rle login et le mot de passe
    			reponse = rmiStub.login(profil, login, mdp);
    		} catch(NotBoundException nbe){
    			System.err.println("Serveur Rmi injoignable");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return reponse;
    	}
    Par contre toi, tu n'utilise pas le port par default donc tu dois vérifier deux choses :
    1 - Que tu lance bien ton rmi registry avec le bon numéro de port
    2 - Modifie la chaine de cnx dans le naming.lookup
    Naming.lookup("rmi://adr/service:port");

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    J'ai le même souci, dans un contexte web que je teste en local.
    J'ai placé ce fichier dans web-inf/classes.
    Je le charge par le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("java.security.policy", "wideopen.policy");
    Mais j'ai l'erreur suivante :

    class java.security.AccessControlExceptionaccess denied (java.util.PropertyPermission java.security.policy write)

    access denied (java.util.PropertyPermission java.security.policy write)

    Je suppose qu'il n'arrive pas à charger le fichier car si je lance l'application
    via un main ça fonctionne

    Je me demande où dois je placer ce fichier policy pour un contexte web ?
    Le progrès commence par la communication!!!!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    Je complète mon message en apportant un peu plus de précisions :
    voici mon 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
     
            if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());            
            }
            try {
            	System.setProperty("java.security.policy", "wideopen.policy");
            	Registry registry = LocateRegistry.getRegistry(1099);
            	IServiceTest stub = (IServiceTest)registry.lookup("Instance");
        	boolean response = stub.startService();
        	System.out.println("response: " +response);
            }
            catch(Exception e){
            	System.out.println("Error in the client : " +e.getClass().toString() +e.getMessage());
            	e.printStackTrace();
            }
    Si j'exécute via une fonction main ce code ca fonctionne.
    Si je le mets dans un environnement web alors que le fichier policy est dans le classpath j'ai l'erreur suivante :
    class java.security.AccessControlException access denied (java.util.PropertyPermission java.security.policy write)

    J'ai fait aussi les System.setProperty avant de faire le new SecurityManager() et dans ce cas même en le lançant avec la méthode main ca ne fonctionne pas

    Si vous avec des pistes, je suis preneur
    Le progrès commence par la communication!!!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut RMi via Internet
    Ce qui est sûr c'est qu'il faut mettre le set sur le .policy avant de faire new SecurityManager, sinon il te marquera connexion refused.
    Fait cette modification et vérifie s'il lit bien ton fichier policy

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    Si je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      System.setProperty("java.security.policy", "wideopen.policy");		
      if (System.getSecurityManager() == null) {
                System.setSecurityManager(new SecurityManager());            
       }
       try {        	
           Registry registry = LocateRegistry.getRegistry(1099);
    ....
    j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class java.security.AccessControlExceptionaccess denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
    Si je mets le setProperty après le new SecurityManager() ca fonctionne pour un main mais toujours pas dans un contexte web.
    J'ai essayé de mettre le chemin absolu du fichier, dans le classpath rien à faire. Je suis un peu à court d'idées
    Le progrès commence par la communication!!!!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut RMi via Internet
    Essaye de changer le nom de ton policy dans le code sans changer vraiment le nom du fichier, s'il te sors la même erreur, ça voudra dire qu'il ne lit même pas ton fichier.
    Mets le .policy dans le web-inf/classes et redémarre carrément la machine.

    Une dernière vérification : t'as pas changer le contenu de ton .policy ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Pour le problème de "Connection timed out", j'ai trouvé une information importante sur un forum anglais:

    Apparemment, le port que l'on spécifie lors du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    registry = LocateRegistry.createRegistry(18500);
    n'est pas le seul qu'il faut ouvrir/rediriger. En effet, pour chaque objet exporté, un port d'écoute aléatoire est mis en place. Il faut donc spécifier ce port d'écoute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stub = (Plateau) UnicastRemoteObject.exportObject(service,18501);
    Voila, je sais pas si ça résoudra le problème de tout le monde, mais je pense que c'était un point à connaître.

    Sinon pour mon prédédent problème de "Connection Refused", il semblerait que ca n'était du qu'à un réglage du parefeu de ma boîte. Je n'ai pas spécifié de RMISecurityManager, et je n'ai plus de problème.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    Non je n'ai pas changé le contenu du fichier policy

    Mais effectivement, en contexte web
    il ne lit pas le contenu de mon fichier qui est pourtant
    à la racine de mon web-inf/classes. (J'ai la même erreur)

    Concernant les ports à ouvrir j'ai mis un allPermission
    Le progrès commence par la communication!!!!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut RMi via Internet
    Quel ide utilises tu ?
    Pour moi ça marche, j'avais une application web qui vérifié les logins auprès du serveur rmi et ça marche, par contre, ce que j'ai mis moi est le chemin complet du fichier policy.
    Attends, est ce que tu utilise struts ?
    si oui, essaye de mettre /nomduprojetweb/x.policy et ton fichier policy, mets le directement dans Web content (dans le même niveau que WEB-INF)
    essaye et dis moi !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    J'utilise pas Struts mais JSF.
    J'ai essayé avec les chemins complets dans le classpath et ça fonctionne.
    J'avais mal compilé car j'utilise en fait un projet (ou il y à le rmi) à l'intérieur de mon projet web (un jar dans mon projet web en fait).

    Au moins j'ai pu avancer c'est l'essentiel. par contre la chose étrange maintenant, en lançant mon code depuis un main j'ai une erreur si je mets le setProperty avant d'instancier le manager.
    Autrement dit j'ai pas le même résultat suivant que je sois en web ou depuis un main.

    Encore merci pour l'aide, pour le reste c'est du perfectionnement au moins je suis débloqué.
    à bientôt
    Le progrès commence par la communication!!!!

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    J'ai toujours le "Connection timed out" malgré le fait d'avoir rediriger le port de l'objet.
    Je vais essayer avec le SecurityManager, voire si je peux améliorer ça

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Malgré un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    System.setProperty("java.security.policy","Server.policy");
    if(System.getSecurityManager() == null){
    	System.setSecurityManager(new SecurityManager());
    }
    Lors de l'execution, je récupère une Exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "main" java.security.AccessControlException: access denied (java.io.FilePermission plateauSerial read)
    Je pense que ça vient du fait qu'il ne trouve pas le fichier .policy.
    Je suis sous Eclipse, et d'habitude, ce mode d'indexation fonctionne, quelqu'un a une idée ?

    Edit: Si je met le nom avec l'adresse du fichier, ça marche. l'inconvénient c'est qu'apres je vais exporter ce projet en .jar et que je dois donc avoir une indexation relative et non absolue, savez vous comment faire ?

    Edit2: Bon autant pour moi, l'indexation relative marche très bien, c'est juste que je n'avais pas précisé le nom du package.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.setProperty("java.security.policy","bin/server/Server.policy");
    merci quand même à ceux qui auront regardé.
    J'essayerai de voir si malgré ça j'ai toujours un "Connection: timed out"

    Edit3: Encore une petite modification:
    l'indexation relative ne marche pas une fois exporté en jar, voici le code qui permet de faire fonctionner ça correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ClassLoader myClassLoader = Thread.currentThread().getContextClassLoader();
    URL file = myClassLoader.getResource("server/Server.policy");
    System.setProperty("java.security.policy",file.toString());

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 142
    Points : 87
    Points
    87
    Par défaut
    J'ai remarqué que si on ne crée pas de SecurityManager avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(System.getSecurityManager() == null){
    	System.setSecurityManager(new SecurityManager());
    }
    On peut rentrer l'adresse relative soit dans son projet web ou même dans le classpath d'un jar externe.

    Par contre dès que j'instancie un nouveau SecurityManager il faut l'adresse absolu du fichier policy.
    Un intervenant avait déjà fait remarquer qu'il n'avait pas besoin d'instancier le SecurityManager.

    Sinon la solution de Mister_Kp avec le ClassLoader me semble très bonne mais j'ai pas testé avec la création d'un SecurityManager
    Le progrès commence par la communication!!!!

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Bon, j'ai encore et toujours mon:
    "Connection: timed out"....

    Je commence à être en mal d'inspiration. Quelqu'un a déjà eu le même problème et a réussis à le résoudre ?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Bon, je progresse doucement mais je progresse.
    Je me suis un peu fais avoir par le "Connection: timed out". En y regardant de plus prêt, la connection se fait bien, mais c'est pendant le traitement que ça déconne.

    Apparemment, mon problème vient du passage d'un objet en paramètre:

    Voici le code du client qui pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    registry = LocateRegistry.getRegistry(this.adresse,Integer.parseInt(this.port));
    this.plateau = (Plateau)registry.lookup("Plateau");
    this.monitor = new MonitorSouris(this);
    //C'est la ligne suivante qui provoque le "timed out"
    this.plateau.addSourisListener(this.monitor);
    this.id = this.plateau.nouveauClient(this.nom);
    this.addMouseMotionListener(new Curseur(this));
    this.addMouseListener(new Curseur(this));
    Voici le code de l'objet représenté par this.monitor (côté 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
     
    public class MonitorSouris extends UnicastRemoteObject implements SourisListener{
     
     
    	private FenetreJeu fen;
    	private static final long serialVersionUID = 42L;
     
    	public MonitorSouris(FenetreJeu fen) throws RemoteException{
    		this.fen = fen;
    	}
     
    	public void fermeFenetre() throws RemoteException {
    		this.fen.fermeFenetre();
    	}
     
    	public void mouseUpdate(HashMap<Integer, PositionSourisInt> liste, ArrayList<PositionSourisInt> listePosFixe) throws RemoteException {
    		this.fen.mouseUpdate(liste,listePosFixe);
     
    	}
    }
    Voici l'interface SourisListener (côté client & serveur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public interface SourisListener extends Remote{
     
    	public void fermeFenetre() throws RemoteException;
    	public void mouseUpdate(HashMap<Integer,PositionSourisInt> liste,ArrayList<PositionSourisInt> listePosFixe)throws RemoteException;
     
    }
    Et enfin voici le code du serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void addSourisListener(SourisListener sl) throws RemoteException{
    	this.ecrivainListener.lock();//Blocage en écriture (Listener)
    	this.listeners.add(sl);
    	this.ecrivainListener.unlock();//Déblocage en écriture (Listener)
    }
    Je rappel que tout ceci marche très bien en local ou en réseau local mais pas sur Internet.
    Le problème vient probablement de l'objet MonitorSouris qui étends UnicastRemoteObject mais je ne vois pas en quoi.

    merci encore à ceux qui prendront de leur temps pour m'aider

  19. #19
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    @totoranky

    dans un contexte de web application, t'es pas censé et t'as normalement pas le droit de changer les règles du security manager. C'est le conteneur webapp qui édicte ses règles. Dans tomcat, par défaut, il n'y a pas de règle, donc tu pexu faire ce que tu veux. Mais si l'admin du serveur a activé le security manager de tomcat, alors le fichier policy de tomcat va être chargé et il t'interdira de changer les policy, ainsi que pas mal d'autres trucs. Pour tuner les règles du security manager, une fois qu'il a été activé dans tomcat, il faut modifier les .policy de tomcat. Pour les autres conteneurs webapp, le fonctionnement est a priori similaire. Il faut bien savoir que si une webapp change les règles du security manager, celles-ci s'appliquent à toutes les webapp dans le même conteneur, hors on cherche, à priori, à éviter les effets de bord entre les webapps.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Points : 55
    Points
    55
    Par défaut
    Ca y'est j'ai trouvé mon problème... et malheuresement il n'y a pas de solution "simple".

    En gros, le problème apparait lorsque le client est derrière une routeur NAT. Si ce dernier essaye de créer un objet et de l'exporter dans le RMI registry (dans mon cas, le listener), le serveur ne pourra pas l'utiliser puisqu'il ne pourra pas communiqué avec le client.

    Source

    La solution est en fait de creer un thread côté client qui se renseigne régulèrement sur le serveur pour savoir si de nouveaux évènements ont eu lieu.

    Voici l'adresse contenant un exemple de code:
    Source

    Si quelqu'un a une solution alternative a proposer, je suis tout ouie.

Discussions similaires

  1. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  2. est il possible de téléphoner via internet?
    Par soders dans le forum Messagerie instantanée
    Réponses: 5
    Dernier message: 19/11/2004, 18h07
  3. Connexion a un bd via internet
    Par toure32 dans le forum Bases de données
    Réponses: 4
    Dernier message: 24/07/2004, 19h33
  4. Exécutable gérant une base de données distante via internet
    Par paulgiot dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/07/2004, 14h00
  5. Connexion à une base SQL_Serve via Internet
    Par Yoann_D dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/07/2003, 15h39

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