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

Autres Java Discussion :

server inaccéssible depuis l'exterieur.


Sujet :

Autres Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut server inaccéssible depuis l'exterieur.
    Bonsoir, j'ai lus quelque tutoriel hier pour m'initier au langage java, et j'ai décidé d'essayer de faire un petit server.
    Sachant que je suis derrière un routeur, j'ai deux pc le premier (le server) avec l'ip 192.168.30.10 et le deuxième pc2 avec 192.168.30.11.
    Dabors, si je ne désactive pas les firewalls sur les deux pc je ne peux pas me connecté, je voudrai savoir comment font les application comme msn, les jeux ... pour évité se problème.
    ensuite même en désactivant les firewalls je n'arrive pas a accédé au server par l'ip public (pas celle du réseau celle d'internet).

    en gros je voudrait connaitre la procédure a suivre pour qu'on puisse se connecté sur mon server de l'extérieur et ne pas se soucier du firewalls.
    merci.

    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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    package reseau.server;
     
    import java.net.*;
    import java.io.*;
    import java.util.Vector;
     
    /**
     *
     * @author amine
     */
    public class Server  {
     
        protected static Server instance;
     
        /**
         * socket du server
         */
        protected ServerSocket socket;
     
        /**
         * port du server
         */
        protected static int port = 25;
     
         /**
         * tableau des sockets clients connectés au server (thread safe).
         */
        protected final Vector<Socket> clients = new Vector<Socket>();
     
        /**
         * constructeur privé crée la socket su server.
         */
        protected Server() {       
           try {
                socket = new ServerSocket(port);
     
                System.out.println("Server lancer avec succes sur le port " + port);
                System.out.println("A l'addresse  " + socket.getInetAddress().getHostAddress());
            } catch (IOException e) {
                System.err.println("Erreur lors de la création de la socket " + e.getMessage());
            }
        }
     
        public static synchronized Server getInstance() {
            if (instance == null) {
                instance = new Server();
            }
            return instance; 
        }
     
        public static void setPort(int port) {
            Server.port = port;   
        }
     
        public void close() {
            try {
                for (Socket s : this.clients) {
                    s.close();
                }
                socket.close();
     
            } catch(IOException e) {
                 System.err.println("Erreur lors de la fermeture du server " + e.getMessage());
            }
        }
     
        /**
         * ajouter le socket d'un client connecté.
         * @param socket s
         */
        public void addClient(Socket s) {
            clients.add(s);
        }
     
        /**
         * ferme la connexion du socket (si elle n'est pas deja fermé) 
         * puis l'enlève de la liste des clients.
         * @param socket s
         */
        public void deleteClient(Socket s) {
     
            clients.remove(s);
     
            try {
                s.close();
            } catch (IOException e) {
                System.err.println("Erreur lors de la supression du socket d'un client" + e.getMessage());
            }
        }
     
        /**
         * Met le server en attente du demande de connexion.
         * enregistrer la socket une fois la connexion établie.
         * methode bloquante a lancer dans un thread appart. 
         * @return socket d'un client connecté
         * @throws java.io.IOException
         */
        public Socket listen() throws IOException {
            System.out.println("Le server est en attente d'une connextion");
            Socket s = socket.accept();
            System.out.println("Connexion établie avec " + s.getInetAddress());
            return s;   
        }
     
        public static void main(String[] args) {
            if ( args.length > 0 ) 
                Server.setPort(new Integer(args[0]));
     
            Server server = Server.getInstance();
     
            try {
                new ServerThread(server.listen());
            } catch (IOException e) {
                System.err.println(e.getCause());
                System.err.println(e.getMessage());
            }
        }
    }
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    /*
     * Objet pilotant la classe server, gérant la liaisant entre un client et le server
     * dans un thread a part.
     */
     
    package reseau.server;
     
    import java.io.IOException;
    import java.net.*;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
     
    /**
     *
     * @author ordi
     */
    public class ServerThread extends Thread {
     
        /**
         * le server (singleton)
         */
        protected Server server;
     
        /**
         * la socket du client
         */
        protected Socket ssClient;
     
        /**
         * BufferedWriter objet qui sert a l'envoie de données
         */
        protected BufferedWriter out;
     
        /**
         * BufferedReader objet qui sert a la reception de données
         */
        protected BufferedReader in;
     
        /**
         * constructeur: initialise le nom du thread, socket, reader, writer... 
         * puis lance le thread
         * @param ss socket du client
         */
        public ServerThread (Socket ss) throws IOException {
            super(ss.getInetAddress().toString());
     
            server   = Server.getInstance();
            ssClient = ss;
            out      = new BufferedWriter( new OutputStreamWriter(ss.getOutputStream()) );
            in       = new BufferedReader( new InputStreamReader(ss.getInputStream()) );
     
            server.addClient(ss);
            start();
            new ServerThread(server.listen());        
        }
     
        @Override
        public void run () {
            String l;
     
            try {
     
                send("Hello :)");
     
                while (!(l = in.readLine()).equals("quit")) {
                    System.out.println(l);
                }
     
                //on netoie avant d'arreter le thread
                in.close();
                out.close();
                server.deleteClient(ssClient);
                ssClient.close();
            } catch (IOException e) {
     
            }
     
        }
     
     
        protected void send(String s) throws IOException{
            out.write(s + "\n\r");
            out.flush();
        }
     
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    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 481
    Points : 48 806
    Points
    48 806
    Par défaut
    d'abord, entre les deux pc, les *autre* protocoles sont connu, et donc vraisemblablement ont déjà des règles d'autorisation dans les firewalls.

    De plus, on fait rarement tourner chez soit un serveur msn, juste des clients

    ensuite pour l'accès depuis le net, faut configurer une dmz dans ton routeur avec des règles de NAT qui permettent au routeur d'exposer à l'extérieur un port qui sra forwardé sur un port intérieur d'une machine privée.

  3. #3
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Cette question n'a rien avoir avec Java.

    Pour accéder à ton serveur depuis l'extérieur, tu dois configurer ton routeur de tel sorte qu'il forward un port que tu auras choisi vers le port qui attends la connexion sur ta machine serveur.

    Pour ta question sur les pare-feu, je te conseils de lire les tutoriaux à ce sujet. Tu devras forcément ajouter une règle à ton pare-feu pour accepter pour le serveur les connexions entrantes sur le port d'écoute et accepter pour les clients les connexions sortantes sur le port cible du serveur.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Tout dabors merci de vos réponse.
    je pense que je me suis légérement mal exprimé, enfaite ce que je voudrai savoir c'est: es qu'il n'y aurai pas en java des facilitées pour construire une application client-server sans trop se cassé la tête.
    en gros je voudrai faire une application client-server que je distribuerai aux visiteurs de mon site (site d'annonces) dans cette application ils pourront par exemple chater, effectuer quelques opérations sur les annonces.... seulement je ne compte pas expliquer a tous ceux qui ont un firewall ou un routeur la methode a suivre pour ouvrir certain port, ajouter des règles.... c'est pour ça que je voudrai savoir comment font les autres application par exemple émule même sans ouvrir les ports il se connecte en low id les jeux aussi (comme counter strike passe directement sans rien toucher) .... sans jamais vraiment avoir besoin de touché a la configuration du routeur ou du firewall.
    On ouvrant les ports et en ajoutant des règles dans le firewall le transfert de donnée chez moi s'accélère mais même sans, ses application marche et je souhaiterait arrivé au même résultats.
    merci de m'éclairai un peu.


    ps: c'est vrai qu'emule ou msn c'est pas vraiment concret comme exemple car les server sont pas vraiment chez les "utilisateurs", mais par exemple un jeux comme counter strike qui marche sur le port 27015 ben si je crée une partie (je fais le server) sa marche directement mes amis arrive a se connecté a ma machine et je n'ai jamais rien changé a ma config (il n'y a aucune règles explicite que j'ai définie). mais bon d'après vos réponses il n'y a pas 36000 et pour ce jeux peut que comme il est assez connue peut être qu'il existe des règles définie par les créateur du firewall.

  5. #5
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Pour la configuration du routeur, il faut uniquement le faire pour celui qui héberge le serveur. Et il faut ajouter quelques règles de configuration sur le pare-feu.

    Pour le client, si tu te connectes via une application sur un serveur alors sauf si c'est un pare-feu de merde il te demandera si oui ou non tu veux accepter la connexion. Alors ils n'auront pas à faire des trafics compliqués.

    Si tu veux éviter tout de même éviter cette étape, tu peux faire un web service qui utilise donc le port 80 pour tes échanges entre client et serveur.

    Si tu fais du 100% Java, tu as aussi la solution d'utiliser RMI pour éviter d'utiliser les sockets.

  6. #6
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Pour la configuration du routeur, il faut uniquement le faire pour celui qui héberge le serveur. Et il faut ajouter quelques règles de configuration sur le pare-feu.
    justement sa sera celui qui lance la conversation qui jouera le rôle de server.

    Pour le client, si tu te connectes via une application sur un serveur alors sauf si c'est un pare-feu de merde il te demandera si oui ou non tu veux accepter la connexion. Alors ils n'auront pas à faire des trafics compliqués.

    Si tu veux éviter tout de même éviter cette étape, tu peux faire un web service qui utilise donc le port 80 pour tes échanges entre client et serveur.

    Si tu fais du 100% Java, tu as aussi la solution d'utiliser RMI pour éviter d'utiliser les sockets.
    ok, merci beaucoup je vais me documenter.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Acces depuis l'exterieur a postgres
    Par andromeda dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 18/02/2008, 22h16
  2. Problème de connexion à mon site depuis l'extèrieur
    Par samsoum07 dans le forum Apache
    Réponses: 1
    Dernier message: 07/12/2006, 10h32
  3. [C-Box] Probleme de NAT - connexion depuis l'exterieur
    Par doudoustephane dans le forum Hardware
    Réponses: 23
    Dernier message: 25/06/2006, 00h37
  4. [APACHE] Marche en Local mais pas depuis l'exterieur
    Par ThanosT dans le forum Apache
    Réponses: 3
    Dernier message: 20/02/2006, 14h38
  5. acceder a phpmyadmin depuis l'exterieur
    Par silvain59 dans le forum Apache
    Réponses: 5
    Dernier message: 31/10/2004, 19h30

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