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

Java Discussion :

Envoi d'image par WebSocket


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Par défaut Envoi d'image par WebSocket
    Bonjour,
    Dans le cadre de mon stage je dois réaliser un programme java (côté serveur) qui doit exposer une image qui pourra ensuite être récupérée côté client (javascript).
    Je cherche donc à envoyer mon image via la WebSocket pour la réceptionner et l'afficher côté javascript.
    Mais malgré mes recherches je n'ai pas trouvé de moyen de le faire (sachant que je travaille avec la librairie JWebSocket), que ce soit en envoyant l'image sous un certain format, ou son tableau de byte, ou d'une autre manière ...
    Si vous avez des idées ou pistes je suis preneur, sachant que s'il faut je peux changer de librairie, le seul élément imposé étant l'utilisation des WebSockets.
    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Je suppose que l'image ne peut vraiment pas être transmise simplement par HTTP comme d'habitude, avec une URL vers elle ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Par défaut
    Malheureusement non, on cherche à envoyer directement l'image sur la page web contenant le javascript sans passer par une url intermédiaire :/
    Pour le moment j'ai déjà réussi à envoyer des WebSockets depuis le Java vers le Javascript mais ca en reste à des String, et comme JWebSocket me fournit un "TokenServer" je ne peux pas l'utiliser en faisant une sorte de "connection.sendData(byte[] datas)" ...

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Humm... En principe les websockets permettent d'échanger du binaire, mais je regarde les JavaDocs des implémentations Java, et je ne vois que de la gestion de String ou de JSON (basé sur du texte donc.)

    Je ne trouve pas d'exemple montrant un échange binaire avec une des stack websocket pour Java.
    Au pire, tu dois pouvoir l'encoder en base64 sous forme de data-url, et la lire et t'en servir tel que côté JavaScript. C'est vraiment pas efficace mais ça devrait marcher.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Par défaut
    Ok merci de ta réponse Je vais essayer de voir ça, au pire il y a toujours l'alternative de l'image exposée sur une url même si ce n'est pas ce qui était voulu au départ ...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Par défaut
    Bon voilà problème résolu en passant par base64 :
    Je poste le code si ca pose soucis à quelqu'un d'autre un jour :
    Côté Java avec JWebServer :
    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
     
    public class ServeurImage
    {
    	private static ImageAEnvoyer image;
     
    	public static byte[] getImageByteArray()
    	{
    		return image.getImageByteArray();
    	}
     
        public static void main(String[] args)
        {
        	image = new ImageAEnvoyer();
    	    try
    	    {
            	JWebSocketFactory.printCopyrightToConsole();
            	JWebSocketConfig.initForConsoleApp(args); 
    	        JWebSocketFactory.start();
     
    	        TokenServer tokenserver = (TokenServer) JWebSocketFactory.getServer("ts0"); // De la forme 192.168.x.x:8787
    	        if (tokenserver != null)
    	        {
    	            tokenserver.addListener(new MonListener());
    	        }
     
    	        while (JWebSocketInstance.getStatus() != JWebSocketInstance.SHUTTING_DOWN)
    	        {  
    	            try
    	            {  
    	                Thread.sleep(250);  
    	            }
    	            catch (InterruptedException ie)
    	            {  
    	                // no handling required here  
    	            }  
    	        }  
    	    }
    	    catch (Exception e) 
    	    {  
    	        System.out.println(e.getClass().getSimpleName() + " on starting jWebsocket server: " + e.getMessage());  
    	        e.printStackTrace();  
    	    }
    	    finally
    	    {  
    	        JWebSocketFactory.stop();  
    	    }  
        }
    } 
     
    public class MonListener implements WebSocketServerTokenListener
    {
        public void processToken(WebSocketServerTokenEvent wsste, Token token)  
        {
            System.out.println("Token. "+token.getLogString());
        }
        public void processOpened(WebSocketServerEvent wsse)  
        {  
            System.out.println("Opened.");  
        }
        public void processPacket(WebSocketServerEvent wsse, WebSocketPacket wsp)  
        {
            if(wsp.getString().equals("getImage()"))
            {
            	byte[] array = ServeurImage.getImageByteArray();
                wsp.setString(Base64.encodeBase64String(array));
                wsse.sendPacket(wsp);
            }
        }
        public void processClosed(WebSocketServerEvent wsse)  
        {  
            System.out.println("Closed.");  
        }
    }  
     
     
    public class ImageAEnvoyer
    {
    	private String imageSrc;
     
    	public ImageAEnvoyer()
    	{
    		imageSrc="sourceImage.png";
    	}
     
    	public byte[] getImageByteArray()
    	{
    		File file = new File(imageSrc);
    		byte[] ret = new byte[(int) file.length()];
    		try
    		{
    			new FileInputStream(file).read(ret);
    		}
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    		return ret;
    	}
    }
    Côté Javascript avec Socket.io :
    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
     
    var ws = new WebSocket("ws://192.168.x.x:8787");
     
    ws.onopen = function(ev)
    {
      console.log('Connection opened.');
    }
    ws.onmessage = function(ev)
    {
    	document.images["img"].src = "data:image/png;base64," + ev.data;
    	console.log("Src : " + document.images["img"].src);
    }
    ws.onclose = function(ev)
    {
      console.log('Connection closed.');
    }
    ws.onerror = function(ev)
    {
      console.log('An error occurred. Sorry for that.');
    }
     
    ws.onreceive = function (data)
    {
    	console.log('Receive');
    }

Discussions similaires

  1. Envoi d'images par requête HTTP : Index Out Of Range
    Par Imperium7 dans le forum Réseau
    Réponses: 0
    Dernier message: 01/05/2015, 17h31
  2. envoi d'image par file qui plante
    Par kaking dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2011, 12h08
  3. envoie de fichier html avec image par email
    Par goomie dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 26/05/2007, 21h47
  4. Envoi image par formulaire et prise d'url
    Par cream dans le forum Langage
    Réponses: 7
    Dernier message: 09/02/2007, 14h21
  5. [MySQL] Envoi d'images par formulaire et post-traitement
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/04/2006, 13h58

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