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 :

[Socket] Envoyer des objets


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut [Socket] Envoyer des objets
    Bonjour à tous,

    Dans le cadre d'un cours, je dois développer une petite application client-server en utilisant les sockets et le protocole TCP, donc avec ServerSocket. Pour le moment, je peux lancer mon serveur, et attendre sur des clients. J'ai mis une max de 2 clients autorisés pour les besoins de mon application. J'ai ensuite créer tout ce qu'il fallait pour pouvoir s'échanger des messages entre le client et le serveur mais sous forme de String uniquement.

    Voici mon code actuellement

    Classe du server
    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
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
     
     
    public class Server {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		int listenPort = 2011;
     
    		ServerSocket socketserver  ;		//utilisé pour accepter les connexions des clients
     
    		try {
    			socketserver = new ServerSocket(listenPort);
    			System.out.println("Server.java : Server is up and listen for connexions on the port TCP#"+socketserver.getLocalPort());
    			Thread t = new Thread(new getClients(socketserver));
    			t.start();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
    }
     
    class getClients implements Runnable {
     
    	private ServerSocket socketserver;
    	private Socket socket;
    	private int nC = 1;
     
    	BufferedReader in;
    	PrintWriter out;
     
    	public getClients(ServerSocket socketServer){
    		this.socketserver = socketServer;
    	}
     
    	/** For the thread */
    	public void run() {
    		try {
    			while(nC <= 2){ //while there are no 2 players, we can't start the game 
    				socket = socketserver.accept();
     
    				InetAddress clientIP = socket.getInetAddress();
    				int clientPort = socket.getPort();
    				System.out.println("Server.java : the client #"+nC+ " ("+clientIP+":"+clientPort+") is now connected !");
     
    				//send message to the client
    				out = new PrintWriter(socket.getOutputStream());
    		        out.println("Message from Server.java : You are now connected player#"+nC);		  
     
    		        out.flush();
     
    		        nC++;
    			}
    			System.out.println("Server.java : Start the game. Call Heger methods");
     
    			socket.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    }
    Classe du 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
    35
    36
    37
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
     
    public class Client {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Socket socket;
    		BufferedReader in;
    		PrintWriter out;
     
    		try {
    			socket = new Socket("localhost",2011);
    			System.out.println("Client.java : Connexion Query send");
     
    			//Get and display message from the server
    			in = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    	        System.out.println(in.readLine());
     
    			socket.close();
    		}catch (UnknownHostException e) {
    			e.printStackTrace();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Mon problème c'est que j'aurai besoin de transférer des objets et non pas de simple string. J'ai essayé pendant un bon moment mais je n'arrive pas à trouver la solution donc j'espère que vous pourrez m'aider.

    merci d'avance.

    cyrill

  2. #2
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Salut,

    Justement sert toi des String pour transporter tes objets.
    Tu sérialises ton objet sous forme de XML, tu auras donc un String avec du contenu XML, tu l'envoies à ton serveur, et ce dernier dé-sérialise ton objet et le récupère correctement. (C'est un peu le principe des Web Service qui ne retourne qu'une structure XML, donc pour faire passer des objets on utilise la sérialisation).

    Tiens va checker ça:
    http://java.sun.com/developer/techni...s/ALT/sockets/

    Bonne chance !

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Étant donné que c'est une communication client/serveur de java vers java, il faut que tu utilises RMI pour passer des objets entre le client et le serveur.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    A préciser que RMI est un système incluant le protocole de communication donc pas d'utilisation de sockets (dans le sens, pas besoin de coder de sockets hein ). Or ici, il désire les utiliser à priori.

    RMI équivaut à l'utilisation de socket incluant le transfert d'objet (par sérialisation) et autres. Personnellement je trouve ça lourd (ça n'engage que moi). Et je favorise plutôt la création (vu qu'il débute) de sockets avec un système de sérialisation (ce qui n'est absolument pas compliqué à mettre en place).
    Enfin ça aussi, ça n'engage que moi

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par ZnhaarX Voir le message
    ... Or ici, il désire les utiliser à priori.
    Autant pour moi, en effet c'est dans le cadre d'un cours donc pas de RMI !
    Citation Envoyé par ZnhaarX Voir le message
    RMI équivaut à l'utilisation de socket incluant le transfert d'objet (par sérialisation) et autres. Personnellement je trouve ça lourd (ça n'engage que moi).
    Lourd dans quel sens ?
    Dans sa mise en place ? si oui :
    L'argument est très discutable, c'était compliqué a mettre en place dans la vielle version de RMI !
    Maintenant il n'y a plus grand chose a faire pour exposé un objet.
    Citation Envoyé par ZnhaarX Voir le message
    Et je favorise plutôt la création (vu qu'il débute) de sockets avec un système de sérialisation (ce qui n'est absolument pas compliqué à mettre en place).
    Ca aussi c'est discutable, car il faut dans ce cas mettre en place un protocole de communication entre le client et le serveur, ce n'est pas que du transfert d'objet.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    Merci pour vos réponses. Voici comment j'ai fait pour finir. Je vous montre l'exemple d'un passage de boolean.

    Classe du server.
    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
    package com;
    /**
     * @author cyrill gremaud
     * version 1.0
     * 
     * This is the classes which manage the server.
     * This server, wait for 2 clients.
     * When he receive a connexion query from a client, he allow the connexion
     * After that, for security reasons, he check the connectivity with the client
     * and it's ok, he allow the client to place his boats on the game floor.
     */
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Server {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		int listenPort = 2011;
     
    		ServerSocket socketserver;
     
    		try {
    			socketserver = new ServerSocket(listenPort);
    			System.out.println("Server.java : Server is up and listen for connexions on the port TCP#"+socketserver.getLocalPort());
    			Thread tClient = new Thread(new getClients(socketserver));
    			tClient.start();
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
     
    /**
     * 
     * @author cyrill Gremaud
     * Version 1.0
     * 
     * This classe implements Runnable for manage threads. 
     */
    class getClients implements Runnable {
     
    	private ServerSocket socketserver;
    	private Socket socket;
    	private int nC = 1;
    	private int maxClient = 2;
    	private boolean canPlaceBoat = false;
     
    	BufferedReader in;
    	PrintWriter out;
     
    	private ObjectInputStream ois = null;
    	private ObjectOutputStream oos = null;
     
    	public getClients(ServerSocket socketServer){
    		this.socketserver = socketServer;
    	}
     
    	/** For the thread */
    	public void run() {
    		try {
    			while(nC <= maxClient){ 				//while there are no 2 players, we can't start the game 
    				socket = socketserver.accept();
     
    				//Get informations about client
    				InetAddress clientIP = socket.getInetAddress();
    				int clientPort = socket.getPort();
    				System.out.println("Server.java : the client #"+nC+ " ("+clientIP+":"+clientPort+") is now connected !");
     
    				//send message to the client (String method only)
    				out = new PrintWriter(socket.getOutputStream());
    		        out.println("Message from Server.java : You are now connected player#"+nC);		  
    		        out.flush();
     
    		        //Send / receive object to / from the client
    		        ois = new ObjectInputStream(socket.getInputStream());
    		        oos = new ObjectOutputStream(socket.getOutputStream());
     
    		        if(socket.isConnected()){	//control if the client is really connected
    		        	canPlaceBoat = true;
    		        	oos.writeObject(canPlaceBoat);	//say at the client that he can place his boats
    		        }
     
    		        oos.flush();	//clear the stream
     
    		        // close streams
    		        ois.close();
    		        oos.close();
     
    		        nC++;
    			}
     
    			socket.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
    }
    et le 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    package com;
     
    import gui.Controller;
    import gui.View;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
     
     
    public class Client {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		Socket socket;
    		BufferedReader in;
    		PrintWriter out = null;
    		ObjectOutputStream oos = null;
    		ObjectInputStream ois = null;
     
    		try {
    			socket = new Socket("127.0.0.1",2011);
    			System.out.println("Client.java : Connexion Query send");
     
    			//Get and display message from the server
    			in = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    	        System.out.println(in.readLine());
     
    	        oos = new ObjectOutputStream(socket.getOutputStream());
    	        ois = new ObjectInputStream(socket.getInputStream());
     
    	        if((Boolean)ois.readObject()){
    	        	//out.write("Ok. I've begin to place my boats");
    	            View v = new View(socket.getLocalAddress(),socket.getLocalPort());
    	            v.setVisible(true);
    	        }
     
    			socket.close();
    		}catch (UnknownHostException e) {
    			e.printStackTrace();
    		}catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
     
    	}
     
    }
    Voila ;-) J'ai également fait le test avec des classes personnelles en implémentant Serializable et ça marche bien.

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si tu as résolu ton problème, n'oublies pas d'appuyer sur le bouton

    Sinon pour envoyer des objets, il faut bien utiliser ObjectOutputStream et ObjectInputStream.
    Si tu veux envoyer des données "simples", tu peux également utiliser DataInputStream et DataOutputStream.

    J'apporte ton attention sur deux points :
    1. Dans ton client tu ne lis pas la première chaîne que tu as envoyée
    2. Autant il n'est pas trop grave d'utiliser deux flux pour manipuler un outputstream (pourvu qu'on n'utilise pas les deux en même temps et qu'on flush bien après chaque utilisation). Autant pour l'inputstream c'est catastrophique, surtout quand l'un des flux est bufferisé. Cela veut dire qu'il va lire plus de données que ce qu'il ne consomme et que le deuxième flux n'aura donc qu'une partie des données !
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    Citation Envoyé par Nemek Voir le message
    1. Dans ton client tu ne lis pas la première chaîne que tu as envoyée
    Tu es sûrs ? Dans le server je fais une première fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.println("Message from Server.java : You are now connected player#"+nC);
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oos.writeObject(canPlaceBoat);
    et dans mon client je fais en premier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    in = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    	        System.out.println(in.readLine());
    puis après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Boolean)ois.readObject()
    non ?

  9. #9
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    Lourd dans quel sens ?
    Dans sa mise en place ?
    Non pas dans sa mise en place, mais dans son exécution même.
    J'ai peut-être exagéré le mot "lourd", car bon ce n'est pas la mort, mais à comparer à CORBA, je trouve ce dernier plus rapide. Après je n'ai rien pour étayer ce que je dis, c'est juste l'expérience qui me fait dire ça
    Puis bon, RMI exclusivement Sun/Java... C'est pas top

    Ca aussi c'est discutable, car il faut dans ce cas mettre en place un protocole de communication entre le client et le serveur, ce n'est pas que du transfert d'objet.
    En fait ce que j'entends par là, c'est que, oui c'est bien d'utiliser des Middleware pour ne pas trop s'embêter (voir même ne pas s'embêter du tout vu la simplicité de mise en place). Mais je préconise plutôt de s'attaquer à ce qui est plus bas niveau pour comprendre un peu le fonctionnement de la chose (mais comme je l'ai dit, ça reste une opinion personnelle ).

  10. #10
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par ZnhaarX Voir le message
    Puis bon, RMI exclusivement Sun/Java... C'est pas top
    Bien ! et donc c'est quoi la solution de remplacement ? tu le code toi même ?

    Citation Envoyé par ZnhaarX Voir le message
    Mais je préconise plutôt de s'attaquer à ce qui est plus bas niveau pour comprendre un peu le fonctionnement de la chose.
    Quoi ? le transfert d'objet ?
    Si tu veux comprendre comment ca fonctionne, il faut regarder 2 choses :
    - Effectivement les sockets
    - Le protocole RMI en fait tu peux distinguer deux choses :
    * Le protocole en lui même (c'est a dire comment appeler une methode sur un objet distant, ...)
    * comment sont passé les objets (paramètres, exception, ...), en gros c'est la sérialisation

    C'est vrai, ca fais pas beaucoup de boulo !

    Citation Envoyé par ZnhaarX Voir le message
    Salut,
    C'est un peu le principe des Web Service qui ne retourne qu'une structure XML, donc pour faire passer des objets on utilise la sérialisation.
    En lisant ça je repense a ton affirmation disant "RMI exclusivement Sun/Java... C'est pas top " sauf que la sérialisation c'est aussi que du java ... donc selon ton raisonnement c'est pas mieux !!!
    Donc des web service ne sont fait que pour du java
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Ouh je suis tombé sur un fervent défenseur et intégriste du RMI

    Citation Envoyé par Alkhan Voir le message
    Bien ! et donc c'est quoi la solution de remplacement ? tu le code toi même ?
    Non tu utilises un autre middleware comme CORBA qui n'est pas seulement utilisable en java.

    Citation Envoyé par Alkhan Voir le message
    C'est vrai, ca fais pas beaucoup de boulo !
    J'ai jamais dit que c'était simple et qu'il n'y aurait pas de boulot

    Citation Envoyé par Alkhan Voir le message
    ...sauf que la sérialisation c'est aussi que du java ...
    Je me demande si tu m'as compris en fait.
    Je parle de pouvoir exploiter RMI dans d'autres langage (ce qui n'est, à ma connaissance, pas fait vu que c'est la propriété de SUN - hormis un projet RMI for C++ qui est toujours en cours je crois -); al contrario d'autres Midleware comme Corba par exemple.
    Et, la sérialisation n'est pas exploitable uniquement en java (.NET, Perl, C, C++, OCalm, Ruby etc.), donc je ne vois pas vraiment pourquoi tu parles de ça ici

  12. #12
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par ZnhaarX Voir le message
    Non tu utilises un autre middleware comme CORBA qui n'est pas seulement utilisable en java.
    Ok je ne conteste pas les interets de CORBA.
    Tu disait que RMI est lourd, cependant il l'est moins que CORBA !
    En fait, RMI c'est un mini CORBA adapté a java uniquement, ce qui le rend moins lourd et moins complexe dans la communication Java/Java.
    Certe, il n'est pas compatible avec d'autre langage, mais si tu ne fais que du java alors c'est pas un problème !

    Citation Envoyé par ZnhaarX Voir le message
    Et, la sérialisation n'est pas exploitable uniquement en java (.NET, Perl, C, C++, OCalm, Ruby etc.), donc je ne vois pas vraiment pourquoi tu parles de ça ici
    C'est toi qui visiblement n'a pas compris :
    Citation Envoyé par ZnhaarX Voir le message
    Ce lien que tu as donné parle de sérialiser les objets, sauf qu'il s'agit dans ce lien de la sérialisation java qui n'est pas la même que celle de CORBA
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre expérimenté Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Par défaut
    Le fait est que je dénigrais (fort bien grand mot ) RMI en partie parce qu'il ne s'utilisait qu'avec Java. Est-ce le cas de la sérialisation ?
    Oui j'ai donné un lien avec de la sérialisation en Java, et ? Je dénigre pas la sérialisation jusqu'à preuve du contraire
    Donc là on est plus dans mon point de vu comme quoi "RMI est lourd", on est passé à autre chose (pour moi en tout cas).

    Je dis juste que RMI ne me plait pas plus que ça (cf. "Puis bon, RMI exclusivement Sun/Java... C'est pas top") car il est inopérable avec d'autres langages (même si dans le cadre actuel du topic - dont on s'éloigne en trollant de manière scandaleuse - on est dans un environnement Java ).

    En lisant ça je repense a ton affirmation disant "RMI exclusivement Sun/Java... C'est pas top " sauf que la sérialisation c'est aussi que du java ... donc selon ton raisonnement c'est pas mieux !!!
    Je parle dans un sens plus général que toi je pense
    Biensûr que la sérialisation au niveau de RMI ce n'est que du Java.
    Mais moi, je parlais dans un sens global pour les langages de programmation quels qu'ils soient.
    > RMI : uniquement utilisable en Java
    > Sérialisation : !(uniquement utilisable en Java)



    Bref, ça ne sert a rien de pourrir plus ce Topic non plus.
    Si on se comprend pas, c'est pas dramatique non plus

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

Discussions similaires

  1. Socket : envoyer des grandes chaines de caractères
    Par LBenji dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/07/2010, 11h26
  2. Envoyer des objets client/serveur
    Par pazze dans le forum Réseau
    Réponses: 8
    Dernier message: 12/03/2010, 02h05
  3. Envoyer des objets par valeur
    Par Promeneur dans le forum Windows Communication Foundation
    Réponses: 7
    Dernier message: 28/03/2008, 17h45
  4. Réponses: 2
    Dernier message: 19/09/2007, 10h21
  5. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35

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