Socket et classe

Nakah Messages postés 7 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 31 janvier 2004 - 16 févr. 2003 à 00:51
JHelp Messages postés 261 Date d'inscription jeudi 5 septembre 2002 Statut Membre Dernière intervention 6 octobre 2005 - 9 mars 2004 à 19:43
Voila je voudrais savoir s'il est possible d'envoyer et de recevoir autre chose que du texte avec l'utilisation des sockets. Je voudrais par exemple envoyer et recevoir une classe.

10 réponses

JHelp Messages postés 261 Date d'inscription jeudi 5 septembre 2002 Statut Membre Dernière intervention 6 octobre 2005 11
16 févr. 2003 à 12:55
C'est tout à fait faisable. Ce principe s'appel la Sérialization.. En fait l'éméteur et le récepteur possédes tout deux le code de la classe, elle est transformer en texte coté éméteur, transmise via la socket, le texte reçu est transformer en une instance de la classe. Voilà pour le principe.
Pour le mettre en place, il te faut une classe dite Serializable, qui est partagée par l'émteur et le recepteur. Et ensuite l'envoyer via un ObjectOutputStream (java.io), et la lire via un ObjectInputStream (java.io).
Pour rendre une classe Serializable, il suffit de lui faire implémenter l'interface Serielizable (java.io) Pour cette interface, pas besoin de définir des méthodes supplémentaires.

Un exemple serait peut-être le bienvenue. Tout d'abord la classe des données, celle qui est envoyé via le Web.
import java.io.Serializable
import java.util.Vector;

public class Donnee implements Serializable
{
    private int quantite;
    private double prix;
    private String nom;
    private Vector descriptions;

   //Constructeur sans paramétre nécessaire pour données les valeurs par défauts pour une classe Sérializable
   public Donnee()
   {
        quantite = 0;
        prix = 0;
        nom="";
        descriptions=new Vector();
    }

    //Autre constructeur
    public Donnee(int quantite,double prix,String nom)
    {
        this.quantite = quantite;
        this.prix = prix;
        this.nom = nom;
        descriptions=new Vector();
    }

   //Ajoute une description
   public void ajouteDescription(String description)
   {
        descriptions.addElement(description);
    }

   public int getQuantite()
   {
       return qaantite;
   }

  //........
}


Bon je l'ai pas mise entiére, c'est juste un exemple.

Ensuite, pour transférer ta classe donnée, il faut creer un ObjectOutputStream, pour celà tu fais :
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());

Puis le transfert :
oos.writeOdject(donnee);

Ou donnee est une instance de Donnee

Pour lire la a classe, il faut constriure un ObjectInputStream
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());

Et pour récuprée la donnée :
Donnee donnee=(Donnee)ois.readObject();


Bien entendu toute ces opértions de ctruction de lecteur ou d'écriveur de flux, et la lecture et l'ecriture, peuvent déclancher des IOException, danoc à capturer avec un try catch quelque part.

JHelp
Nakah Messages postés 7 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 31 janvier 2004
17 févr. 2003 à 21:58
Je te remerci tu m'a sauvé !
8-)
cs_djamel001 Messages postés 20 Date d'inscription lundi 21 janvier 2002 Statut Membre Dernière intervention 10 avril 2003
18 févr. 2003 à 12:49
coucou nakah la truite ! :)
cs_djamel001 Messages postés 20 Date d'inscription lundi 21 janvier 2002 Statut Membre Dernière intervention 10 avril 2003
18 févr. 2003 à 12:50
et peut ton mettre du coté client et du coté serveur une classe identique sauf au niveau d'une méthode...ou alors ca doit etre la meme classe ???

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_smy Messages postés 6 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 15:33
Mon programme ne marche pas, en faisant
Donnee donnee=(Donnee)ois.readObject();

Il me génère une ClassNotFoundException alors que j'ai copié l'exemple donné
cs_smy Messages postés 6 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 15:35
Mon programme ne marche pas, en faisant
Donnee donnee=(Donnee)ois.readObject();

Il me génère une ClassNotFoundException alors que j'ai copié l'exemple donné
cs_smy Messages postés 6 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 15:36
Mon programme ne marche pas, en faisant
Donnee donnee=(Donnee)ois.readObject();

Il me génère une ClassNotFoundException alors que j'ai copié l'exemple donné
cs_smy Messages postés 6 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 15:36
Mon programme ne marche pas, en faisant
Donnee donnee=(Donnee)ois.readObject();

Il me génère une ClassNotFoundException alors que j'ai copié l'exemple donné
cs_smy Messages postés 6 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 9 mars 2004
9 mars 2004 à 15:37
Mon programme ne marche pas, en faisant
Donnee donnee=(Donnee)ois.readObject();

Il me génère une ClassNotFoundException alors que j'ai copié l'exemple donné
JHelp Messages postés 261 Date d'inscription jeudi 5 septembre 2002 Statut Membre Dernière intervention 6 octobre 2005 11
9 mars 2004 à 19:43
Est-ce Donnee existe sur le poste receveur et est dans le même package que la classe Donnee de l'éméteur ?
JHelp
Rejoignez-nous