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

Applets Java Discussion :

Erreur communication socket


Sujet :

Applets Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de docr1
    Profil pro
    Inscrit en
    Février 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 74
    Par défaut Erreur communication socket
    Bonjour,

    Dans le cadre de mon projet, j'ai du realiser une communication entre deux applet via des sockets.
    J'ai donc mis en place la communication est opérationnel.
    Tout allait pour le meilleur des mondes, sauf au moment ou j'ai place mon site sur un serveur distant, et l'erreur est apparu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Exception in thread "Thread-7" java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:42592 accept,resolve)
    	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    	at java.security.AccessController.checkPermission(AccessController.java:546)
    	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    	at java.lang.SecurityManager.checkAccept(SecurityManager.java:1157)
    	at java.net.ServerSocket.implAccept(ServerSocket.java:457)
    	at java.net.ServerSocket.accept(ServerSocket.java:421)
    	at server$1.run(server.java:55)
    Bon je sais qu'il s'agit d'une erreur du a la securité, j'ai tenté de signer mes applets , mais j'ai toujours mon erreur.

    Je viens donc demander votre aide, afin de savoir si une solution existerait?

    Ou au pire, si il existerait un autre moyen.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de docr1
    Profil pro
    Inscrit en
    Février 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 74
    Par défaut
    J'ai trouve la réponse que je cherchais,
    en fait , il s'agissait d'un problème d'appel de la méthode par un appel javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void startServer()
    {
     
        java.security.AccessController.doPrivileged(new java.security.PrivilegedAction()
        {
     
                public Object run()
                {
                    //placer le code ici, dans mon cas il s'agissait d'un thread qui gerait un ServerSocket
                    return "";
                }
        });
    }

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Salut!
    Pourrais-tu m expliquer comment tu as utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.security.AccessController.doPrivileged
    ?
    Parce qu'en fait j ai le même problème que toi, mais lorsque jutilise ta méthode mon applet ne s'initialise plus...

  4. #4
    Membre confirmé Avatar de docr1
    Profil pro
    Inscrit en
    Février 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 74
    Par défaut
    Pour utiliser ca, tu as besoin que ta fonction soit static,
    ainsi que tous les prioprietes en dehors de la propriete.
    tu recopie le script ci dessous et tu place a l'intérieur le code que tu veux utiliser lors d'un appel javascript.

    Comme tu peux voir, j'ai juste place mon thread qui gere mon serveur de socket.
    Cependant, j'ai du signer mon applet pour qu'elle fonctionne.
    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
     
    public static void startServer()
        {
            java.security.AccessController.doPrivileged(new java.security.PrivilegedAction()
            {
                public Object run()
                {
                    //Put the code of your method here
                    Thread t = new Thread()
                    {
                        @Override
                        public void run()
                        {
                             server = null;
                            Socket client = null;
                            BufferedReader reader = null;
                            String ligne;
                            System.out.println("start socket server");
                            try
                            {
                                //prevent to start again a socket server if there is already a started server
                                if (server == null)
                                {
                                    server = new ServerSocket(1025);
                                    client = server.accept();
     
                                    reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                                }
                                try
                                {
                                    //if host connected to socket is localhost
                                    if (client.getInetAddress().toString().contentEquals(client.getLocalAddress().toString()))
                                    {
                                        ligne = reader.readLine();
                                        while (!ligne.equals("quit"))
                                        {
                                            if (ligne.equals("refresh"))
                                            {
                                                System.out.println("page update");
                                                String commande = "onUploadAppletFinished();";
                                                win.eval(commande);
                                            }
                                            ligne = reader.readLine();
                                        }
                                        System.out.println("end com");
                                    }
                                } catch (Exception e)
                                {
                                    e.printStackTrace();
                                } finally
                                {
                                    reader.close();
                                    client.close();
                                    server.close();
     
                                }
                            } catch (IOException ex)
                            {
                                ex.printStackTrace();
                            }
     
                        }
                    };
                    t.start();
     
     
                    return "";
                }
            });
        }
    Dans mon cas, j'ai ete oblige d'utiliser un thread pour le server sinon il bloquait mon navigateur.
    Si tu veux des precisions, n'hesite pas

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Arrrg, malgré tous mes efforts, rien n'y fait, ca ne marche pas...Ce qui est bizarre c'est que je n'ai aucun message d'erreur dans la console java...Pour info, j ai écrit l'applet suivant,que j ai signé avec jarsigner:
    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
    import java.applet.*;  
    import java.awt.*;
    import java.net.*;
    import java.io.*;
    import java.lang.*;
    public class Socket4 extends Applet { 
     
        // Méthode appelée par le navigateur lorsque l'applet est chargée  
        public void init (){
        	//setBackground(Color.gray);
        setBackground(Color.gray);
        }
     
    public static void connect(){
     
    	java.security.AccessController.doPrivileged(new java.security.PrivilegedAction()
        {
            public Object run()
            {
            	try {
            		Socket connexion = new Socket("10.23.54.51",80);
            	    }
            	catch (Throwable t) 
        			{ 
     
        			}
            	return null;
            }
     
        });
     
        }
    }
    que j'appelle dans ma page html avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <APPLET CODE="Socket4.class" archive="ssocket.jar" WIDTH=150 HEIGHT=100  ALIGN=right name="socket">
    	</applet>

  6. #6
    Membre confirmé Avatar de docr1
    Profil pro
    Inscrit en
    Février 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 74
    Par défaut
    J'ai tester ton code, j'ai change l'adresse IP ( c'est celle de google ) et ca marche la connection se fait. J'ai meme allé plus loin en recupérant le code HTML d'une page et il n'y a pas de probleme.

    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
     
    public class Socket4 extends Applet
    {
     
        /**
         * Initialization method that will be called after the applet is loaded
         * into the browser.
         */
        public void init()
        {
            // TODO start asynchronous download of heavy resources
            setBackground(Color.gray);
     
            // si pas d'utilisation de l'exterieur, lancement a l'init
            // supprimer static et doPrivileged
            // this.connect();
     
        }
     
        public static void connect()
        {
     
            java.security.AccessController.doPrivileged(new java.security.PrivilegedAction()
            {
     
                public Object run()
                {
                    try
                    {
     
                        Socket connection = new Socket( "216.239.59.104" , 80);
                        System.out.println("communication faites");
     
                    } catch (UnknownHostException ex)
                    {
                        Logger.getLogger(Socket4.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex)
                    {
                        Logger.getLogger(Socket4.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    return null;
                }
            });
     
        }    // TODO overwrite start(), stop() and destroy() methods
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
    <body>
    <APPLET CODE="Socket4" archive="ssocket.jar" WIDTH=150 HEIGHT=100  ALIGN=right name="socket">
    	</applet>
    <input type='button' onclick="socket.connect();" value="connecter">
    </body>
    </html>
    Mais l'appel de la fonction par un bouton html se passe bien, sinon tu peux appeler la fonction a partir de l'init si tu veux qu'elle se lance automatiquement, mais dans ce cas, tu n'as plus besoin de faire de doPrivileged.

    Dans le cas ou tu serais sous linux, n'oublie pas de rendre le jar executable, sinon ca ne marchera pas.

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

Discussions similaires

  1. Problème communication sockets serveur mutli-client
    Par muad'dib dans le forum Réseau
    Réponses: 5
    Dernier message: 17/05/2007, 02h21
  2. [reseaux] Communication socket/serveur - ne fonctionne plus !
    Par _jfi_ dans le forum Programmation et administration système
    Réponses: 11
    Dernier message: 17/11/2006, 14h46
  3. erreur de socket avec applet
    Par fumiste972 dans le forum Applets
    Réponses: 3
    Dernier message: 18/07/2006, 16h11
  4. Erreur connexion socket
    Par tilte dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/04/2006, 23h48
  5. Erreur de socket avec le composant Indy idHTTP
    Par Etanne dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/10/2004, 11h27

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