Socket

Résolu
Bonjour,

J'ai un problème avec mon code, je ne comprends vraiment pas pourquoi ça plante.
Je veux transférer des fichiers d'un pc à un autre j'utilise pour cela des sockets.
Lors du premier envoi tout fonctionne bien mais si je veux envoyer une seconde fois au client cela plante et me génére cette exception.

java - StreamCorruptedException: invalid type code: AC

Je vous envoi un bout du code pour voir:

Coté serveur pour l envoi du fichier ( biensur j ai instancié les socket avant pour se connecter:

FileInputStream inf=new FileInputStream(new File(path.getAbsolutePath()));
ObjectOutputStream out=new ObjectOutputStream(sock.getOutputStream());
byte buf[] = new byte[1024];
int n;
while((n=inf.read(buf))!=-1){
out.write(encrypt(buf),0,n);
}

cote client quand il reçoit:
ObjectInputStream in=new ObjectInputStream(sock.getInputStream());

byte buf[] = new byte[1024];
int n=0;
FileOutputStream out =new FileOutputStream(new File(dirFileChooser.getSelectedFile().toString()));

while((n=in.read(buf))!=-1){
out.write(c.decrypt(buf),0,n);
}

Le probleme est avec la dernière ligne
le in.read(buf)

Je ne sais pas faut peut être vidé le flux mais pourtant j'en crée un nouveau à chaque fois.
Merci

5 réponses

  1. Modérateur
    Je pense que le problème est lié au fait que tu utilises
    encrypt(buf)
    et
    decrypt(buf)
    avec le buffer entier, alors qu'il faut uniquement considérer les 0 à n valeurs de celui-ci.

    Tu devrais donc remplacer
    out.write(encrypt(buf),0,n)
    par
    out.write(encrypt(buf,0,n))
    , de même dans l'autre sens.

    Remarque : à quoi servent tes méthodes encrypt et decrypt ? Il n'est absolument pas certain que les blocs envoyés seront ceux reçus, ils peuvent être coupés, donc même si mis bout à bout ce qui est envoyé sera ce qui est reçu, si ton cryptage se fait par morceaux il risque d'y avoir un problème lors du décryptage...
    La confiance n'exclut pas le contrôle
    0
    1. mais en fait mm quand je n'encrypte pas ça marche pas, c'est le objectinputstream qui a un probleme j pense
      0
      1. Modérateur
        Ah effectivement, je n'avais pas vu ce point. Il vaudrait mieux que tu utilises les méthodes de haut niveau de ObjectOutputStream, c'est à dire writeObject, writeInteger, writeUTF, etc.
        0
    2. voilà ça me lance cette exception

      java.io.StreamCorruptedException: invalid type code: AC
      at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2487)
      at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2522)
      at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2681)
      at java.io.ObjectInputStream.read(ObjectInputStream.java:862)
      at java.io.InputStream.read(InputStream.java:101)

      au bout du second encoi et c'est la ligne
      while((n=in.read(buf))!=-1) qui pose problème.
      J'ai tt essayé j comprend pas
      0
      1. Modérateur
        Je viens d'essayer ton code, et il fonctionne bien, la seule chose qui pourrait coincer c'est tes méthode encrypt et decrypt.

        Voici deux classes complètes pour tester :

        import java.io.File;
        import java.io.FileInputStream;
        import java.io.IOException;
        import java.io.ObjectOutputStream;
        import java.net.ServerSocket;
        import java.net.Socket;
        
        public class Server
        {
            private static byte[] encrypt(byte[] tab)
            {
                return tab;
            }
            
            public static void main(String[] args) throws IOException
            {
                Socket sock = new ServerSocket(9001).accept();
                
                FileInputStream in = new FileInputStream(new File("C:/test.txt")); 
                ObjectOutputStream out = new ObjectOutputStream(sock.getOutputStream());
                
                byte buf[] = new byte[1024]; 
                int n; 
                while((n=in.read(buf))!=-1)
                    out.write(encrypt(buf),0,n);
        
                out.close();
                in.close();
                sock.close();
            }
        }
        import java.io.File;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.ObjectInputStream;
        import java.net.InetAddress;
        import java.net.Socket;
        
        public class Client
        {    
            private static byte[] decrypt(byte[] tab)
            {
                return tab;
            }
            
            public static void main(String[] args) throws IOException
            {
                Socket sock = new Socket(InetAddress.getLocalHost(),9001);
                
                ObjectInputStream in=new ObjectInputStream(sock.getInputStream());
                FileOutputStream out = new FileOutputStream(new File("C:/test2.txt"));
                
                byte buf[] = new byte[1024]; 
                int n; 
                
                while((n=in.read(buf))!=-1)
                    out.write(decrypt(buf),0,n);
                
                out.close();
                in.close();
                sock.close();
            }
        }
        0
    3. Mais le problème c'est qu'il fonctionne bien juste pour un seul envoi si tu fais des envoi séquentiel ça va bloquer
      0
      1. Modérateur
        Je n'avais pas compris que tu faisais plusieurs envois, le mieux serait que tu montres ton code complet pour te corriger.
        0
      2. import java.awt.BorderLayout;
        import java.awt.Container;
        import java.awt.Desktop;
        import java.awt.GridLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import java.io.ByteArrayOutputStream;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.ObjectInputStream;
        import java.io.ObjectOutputStream;
        import java.net.InetAddress;
        import java.net.ServerSocket;
        import java.net.Socket;
        import java.net.UnknownHostException;
        import java.util.Map;

        import javax.swing.JButton;
        import javax.swing.JComboBox;
        import javax.swing.JFileChooser;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JMenu;
        import javax.swing.JMenuBar;
        import javax.swing.JMenuItem;
        import javax.swing.JOptionPane;
        import javax.swing.JPanel;
        import javax.swing.JTextField;

        public class ChatTransferServer extends JFrame implements ActionListener{

        public static String nom_fichier; //pour le chemin du fichier
        private JTextField file_path;
        private JPanel pan= new JPanel(new GridLayout(2,1));
        private JPanel pan_connexion= new JPanel(new GridLayout(3,2));

        private JTextField address;
        private JLabel name_address;
        private JMenuBar fileMenuBar;
        private JMenu fileMenu;
        private JMenuItem filechoose;
        private JMenuItem fileQuit;
        private JButton btconnect = new JButton("connexion");
        private JButton btFile = new JButton("encrypt file and send");
        private JComboBox liste;
        private JTextField connect;

        private Container c ;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        public static cryptage c1 ;
        public File path;
        public String clé_serveur;
        ServerSocket servsock;
        Socket sock;

        /** Creates a new instance of Client */
        public ChatTransferServer() {
        super("Transfer secure file server");
        //installation des composants graphique

        //pour le menu
        fileMenuBar = new JMenuBar();
        fileMenu = new JMenu("Edit");
        filechoose= new JMenuItem("Choose file");
        fileQuit = new JMenuItem("Sign out");

        fileMenuBar.add(fileMenu);
        fileMenu.add(filechoose);
        fileMenu.add(fileQuit);

        //ajout des listeners
        fileQuit.addActionListener(listenerquit);
        filechoose.addActionListener(listenerchoose);
        btFile.addActionListener(listenerbtFile);
        btconnect.addActionListener(listenerbtconnect);

        // sur le conteneur......
        c = getContentPane();

        Object[] elements = new Object[]{"Encryption Ceasare", "Advanced Encryption Ceasare (with thumbnail)"};
        liste = new JComboBox(elements);

        name_address= new JLabel("Peer Address");
        address=new JTextField(10);
        connect= new JTextField(10);
        connect.setText("server disconnected");
        try {
        address.setText(InetAddress.getLocalHost().toString());
        } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        file_path= new JTextField(15);
        file_path.setFocusable(false);
        pan_connexion.add(name_address);
        pan_connexion.add(address);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(connect);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(btconnect);

        pan.add(file_path);
        // pan.add(this.liste);
        pan.add(this.btFile);
        c.add(pan,BorderLayout.SOUTH);
        c.add(pan_connexion,BorderLayout.NORTH);

        setSize(450,200);
        setJMenuBar(fileMenuBar);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

        public String getcle(){
        return clé_serveur;
        }

        public void setcle(String cle){
        this.clé_serveur=cle;
        }

        ActionListener listenerbtFile = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        String nom=JOptionPane.showInputDialog(null,"Entrez la clé d'encryptage correspondante :","Saisie de la clé",JOptionPane.QUESTION_MESSAGE);
        System.out.println("Server>> encryption and sending : clé "+ nom);
        if (file_path.getText().compareTo("")==0)
        System.out.println("please select a file..");

        try
        {

        //envoi du nom du fichier
        ObjectOutputStream sortie = new ObjectOutputStream(sock.getOutputStream());

        // vidanger lengthtampon se sorie pour envoyer les information
        //d'en-tête.
        sortie.flush();

        try{
        sortie.writeObject(nom_fichier);
        }
        catch(NullPointerException e)
        {

        }
        cryptage c = new cryptage(nom);
        FileInputStream inf=new FileInputStream(new File(path.getAbsolutePath()));

        ObjectOutputStream out=new ObjectOutputStream(sock.getOutputStream());

        byte buf[] = new byte[1024];
        int n;
        while((n=inf.read(buf))!=-1){
        out.write(buf,0,n);
        }
        // inf.close();
        // out.reset();
        // out.reset();

        }

        catch (NullPointerException e)
        {
        System.out.println("Serveur not connected");

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }

        };

        ActionListener listenerbtconnect = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try {
        servsock = new ServerSocket(13267);

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        System.out.println("Waiting...");
        connect.setText("Waiting...");

        try {
        sock = servsock.accept();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.out.println("Accepted connection : " + sock);
        connect.setText("server connected");

        }};

        ActionListener listenerquit = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Exit");
        try {
        sock.close();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.exit(0);

        }};

        ActionListener listenerchoose = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Choose a file");
        System.out.println("LOG : Select a file ...");
        file_path.setText("");
        JFileChooser dirFileChooser = new JFileChooser();

        String approve = new String("CHOOSE FILE");
        // Le bouton pour valider l'enregistrement portera la

        dirFileChooser.showDialog(dirFileChooser, approve); // Pour afficher le JFileChooser...

        try{
        System.out.println( dirFileChooser.getSelectedFile().getPath());

        nom_fichier= dirFileChooser.getSelectedFile().getName();
        path=dirFileChooser.getSelectedFile();

        }
        catch(NullPointerException e)
        {
        }
        System.out.println("name of the file "+ nom_fichier);
        file_path.setText("selected file: "+ nom_fichier);

        try {
        FileInputStream fis = new FileInputStream(dirFileChooser.getSelectedFile());
        byte[] buffer = new byte[1024]; //Récupération du contenu du fichier dans une variable de type byte
        // fis.read(buffer); //Lecture du contenu de la variable buffer

        try {
        for (int readNum; (readNum = fis.read(buffer)) != -1;) {
        bos.write(buffer, 0, readNum); //no doubt here is 0
        //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
        System.out.println("read " + readNum + " bytes,");
        }
        } catch (IOException ex) {

        }
        } catch (IOException ex) {

        }

        }};

        ActionListener listeneropen = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println("LOG : Select a file ...");
        JFileChooser dirFileChooser = new JFileChooser();

        if(dirFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        System.out.println( dirFileChooser.getSelectedFile().getPath());
        nom_fichier= dirFileChooser.getSelectedFile().getName();
        System.out.println("name of the file"+ nom_fichier);

        //ouverture du fichier
        Desktop desk= Desktop.getDesktop();
        try {
        desk.open(dirFileChooser.getSelectedFile());
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }};

        @Override
        public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        }

        public static void main(String[] args) {
        ChatTransferServer appli = new ChatTransferServer();

        }

        }
        0
      3. et la le client
        0
      4. import java.awt.BorderLayout;
        import java.awt.Container;
        import java.awt.Desktop;
        import java.awt.GridLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import java.io.ByteArrayOutputStream;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.ObjectInputStream;
        import java.io.ObjectOutputStream;
        import java.net.Socket;
        import java.net.UnknownHostException;

        import javax.swing.JButton;
        import javax.swing.JComboBox;
        import javax.swing.JFileChooser;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JMenu;
        import javax.swing.JMenuBar;
        import javax.swing.JMenuItem;
        import javax.swing.JOptionPane;
        import javax.swing.JPanel;
        import javax.swing.JTextField;
        import javax.swing.filechooser.FileFilter;

        public class ChatTransferClient extends JFrame implements ActionListener{

        private static String key;
        public static String nom_fichier; //pour le chemin du fichier
        private JTextField file_path;
        private JPanel pan= new JPanel(new GridLayout(2,1));
        private JPanel pan_connexion= new JPanel(new GridLayout(3,2));

        private JTextField address;
        private JLabel name_address;
        private JMenuBar fileMenuBar;
        private JMenu fileMenu;
        private JMenuItem filechoose;
        private JMenuItem fileQuit;
        private JButton btconnect = new JButton("connexion");
        private JButton btFile = new JButton("encrypt file and send");
        private JButton btreceive = new JButton("Receive");
        private JComboBox liste;
        private JTextField connec;
        private Container c ;

        private String path;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        static boolean connect=false;
        static Socket sock;

        public static String clé_client;
        /** Creates a new instance of Client */
        public ChatTransferClient() {
        super("Transfer secure file client");
        //installation des composants graphique
        //pour le menu
        fileMenuBar = new JMenuBar();
        fileMenu = new JMenu("Edit");
        filechoose= new JMenuItem("Choose file");
        fileQuit = new JMenuItem("Sign out");

        fileMenuBar.add(fileMenu);
        fileMenu.add(filechoose);
        fileMenu.add(fileQuit);

        //ajout des listeners
        fileQuit.addActionListener(listenerquit);
        filechoose.addActionListener(listenerchoose);
        btconnect.addActionListener(listenerbtconnect);
        btreceive.addActionListener(listenerbtreceive);

        // sur le conteneur......
        c = getContentPane();

        Object[] elements = new Object[]{"Encryption Ceasare", "Advanced Encryption Ceasare (with thumbnail)"};
        liste = new JComboBox(elements);

        name_address= new JLabel("Peer Address");
        address=new JTextField(10);
        connec=new JTextField(10);
        file_path= new JTextField(15);
        file_path.setFocusable(false);
        pan_connexion.add(name_address);
        pan_connexion.add(address);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(connec);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(btconnect);

        pan.add(file_path);
        // pan.add(this.liste);
        pan.add(btreceive);
        c.add(pan,BorderLayout.SOUTH);
        c.add(pan_connexion,BorderLayout.NORTH);

        setSize(450,200);
        // setJMenuBar(fileMenuBar);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        connec.setText("client disconnected");

        }

        ActionListener listenerquit = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Exit");
        try {
        sock.close();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.exit(0);

        }};

        ActionListener listenerchoose = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Choose a file");
        System.out.println("LOG : Select a file ...");
        file_path.setText("");
        JFileChooser dirFileChooser = new JFileChooser();

        if(dirFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        try{
        System.out.println( dirFileChooser.getSelectedFile().getPath());
        nom_fichier= dirFileChooser.getSelectedFile().getName();

        }
        catch(NullPointerException e)
        {

        }
        System.out.println("name of the file "+ nom_fichier);
        file_path.setText("selected file: "+ nom_fichier);

        try {
        FileInputStream fis = new FileInputStream(dirFileChooser.getSelectedFile());
        byte[] buffer = new byte[1024]; //Récupération du contenu du fichier dans une variable de type byte
        // fis.read(buffer); //Lecture du contenu de la variable buffer

        try {
        for (int readNum; (readNum = fis.read(buffer)) != -1;) {
        bos.write(buffer, 0, readNum); //no doubt here is 0
        //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
        System.out.println("read " + readNum + " bytes,");
        }
        } catch (IOException ex) {

        }
        } catch (IOException ex) {

        }

        }};

        ActionListener listenerbtreceive = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try
        {
        int filesize=6022386; // filesize temporary hardcoded

        long start = System.currentTimeMillis();
        int bytesRead;
        int current = 0;
        // localhost for testing

        String nom=JOptionPane.showInputDialog(null,"Entrez la clé de decryptage correspondante :","Saisie de la clé",JOptionPane.QUESTION_MESSAGE);

        //recuperation name file
        ObjectInputStream entree = new ObjectInputStream(sock.getInputStream());
        String message= "";
        try
        {
        message = (String)entree.readObject();
        }
        catch (IOException e)
        {

        } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        System.out.println("le fichier est "+ message);
        file_path.setText("Receiveé file "+message);
        // receive file
        byte [] mybytearray = new byte [filesize];
        JFileChooser dirFileChooser = new JFileChooser();
        String approve = new String("SAVE");
        // Le bouton pour valider l'enregistrement portera la

        dirFileChooser.setSelectedFile(new File (message));
        if(dirFileChooser.showDialog(dirFileChooser, approve) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        try{

        System.out.println("Server>> decryption : clé "+ nom);
        cryptage c = new cryptage(nom);

        ObjectInputStream in=new ObjectInputStream(sock.getInputStream());

        byte buf[] = new byte[1024];
        int n=0;

        FileOutputStream out =new FileOutputStream(new File(dirFileChooser.getSelectedFile().toString()));
        // System.out.println(dirFileChooser.getSelectedFile().toString());
        //ici pbleme
        while((n=in.read(buf))!=-1){
        out.write(buf,0,n);
        }

        // in.reset();
        // out.close();

        n=0;

        }
        catch(NullPointerException e)
        {

        }
        }

        catch (NullPointerException e)
        {
        System.out.println("client not connected");

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }

        };

        ActionListener listenerbtconnect = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try {
        if (address.getText().compareTo("")!=0)
        { sock = new Socket(address.getText(),13267);
        System.out.println("connected to " +address.getText());
        }
        else
        System.out.println("Pease enter your ip adresse");
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.out.println("Connecting...");
        connec.setText("client connecting");

        }

        };

        @Override
        public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        }

        public static void main(String[] args) {
        ChatTransferClient appli = new ChatTransferClient();
        }

        }
        0
      5. ll faut que tu te connecte en premier lieu ensuite tu choisis un ficher et tu envoi ( j'ai un pbleme pr la reception automatique du fichier par le client c 'st pr ça que pr le moment j ai e bouton recevoir
        0
    4. ok mais c'est long t prévenu

      j vais t envoyer le serveur là
      0
      1. Modérateur
        Utilises les balises de code (elles sont à côté des boutons gras italique et souligné)
        0


      2. import java.awt.BorderLayout;
        import java.awt.Container;
        import java.awt.Desktop;
        import java.awt.GridLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import java.io.ByteArrayOutputStream;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.ObjectInputStream;
        import java.io.ObjectOutputStream;
        import java.net.InetAddress;
        import java.net.ServerSocket;
        import java.net.Socket;
        import java.net.UnknownHostException;
        import java.util.Map;

        import javax.swing.JButton;
        import javax.swing.JComboBox;
        import javax.swing.JFileChooser;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JMenu;
        import javax.swing.JMenuBar;
        import javax.swing.JMenuItem;
        import javax.swing.JOptionPane;
        import javax.swing.JPanel;
        import javax.swing.JTextField;

        public class ChatTransferServer extends JFrame implements ActionListener{

        public static String nom_fichier; //pour le chemin du fichier
        private JTextField file_path;
        private JPanel pan= new JPanel(new GridLayout(2,1));
        private JPanel pan_connexion= new JPanel(new GridLayout(3,2));

        private JTextField address;
        private JLabel name_address;
        private JMenuBar fileMenuBar;
        private JMenu fileMenu;
        private JMenuItem filechoose;
        private JMenuItem fileQuit;
        private JButton btconnect = new JButton("connexion");
        private JButton btFile = new JButton("encrypt file and send");
        private JComboBox liste;
        private JTextField connect;

        private Container c ;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        public static cryptage c1 ;
        public File path;
        public String clé_serveur;
        ServerSocket servsock;
        Socket sock;

        /** Creates a new instance of Client */
        public ChatTransferServer() {
        super("Transfer secure file server");
        //installation des composants graphique

        //pour le menu
        fileMenuBar = new JMenuBar();
        fileMenu = new JMenu("Edit");
        filechoose= new JMenuItem("Choose file");
        fileQuit = new JMenuItem("Sign out");

        fileMenuBar.add(fileMenu);
        fileMenu.add(filechoose);
        fileMenu.add(fileQuit);

        //ajout des listeners
        fileQuit.addActionListener(listenerquit);
        filechoose.addActionListener(listenerchoose);
        btFile.addActionListener(listenerbtFile);
        btconnect.addActionListener(listenerbtconnect);

        // sur le conteneur......
        c = getContentPane();

        Object[] elements = new Object[]{"Encryption Ceasare", "Advanced Encryption Ceasare (with thumbnail)"};
        liste = new JComboBox(elements);

        name_address= new JLabel("Peer Address");
        address=new JTextField(10);
        connect= new JTextField(10);
        connect.setText("server disconnected");
        try {
        address.setText(InetAddress.getLocalHost().toString());
        } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        file_path= new JTextField(15);
        file_path.setFocusable(false);
        pan_connexion.add(name_address);
        pan_connexion.add(address);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(connect);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(btconnect);

        pan.add(file_path);
        // pan.add(this.liste);
        pan.add(this.btFile);
        c.add(pan,BorderLayout.SOUTH);
        c.add(pan_connexion,BorderLayout.NORTH);

        setSize(450,200);
        setJMenuBar(fileMenuBar);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

        public String getcle(){
        return clé_serveur;
        }

        public void setcle(String cle){
        this.clé_serveur=cle;
        }

        ActionListener listenerbtFile = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        String nom=JOptionPane.showInputDialog(null,"Entrez la clé d'encryptage correspondante :","Saisie de la clé",JOptionPane.QUESTION_MESSAGE);
        System.out.println("Server>> encryption and sending : clé "+ nom);
        if (file_path.getText().compareTo("")==0)
        System.out.println("please select a file..");

        try
        {

        //envoi du nom du fichier
        ObjectOutputStream sortie = new ObjectOutputStream(sock.getOutputStream());

        // vidanger lengthtampon se sorie pour envoyer les information
        //d'en-tête.
        sortie.flush();

        try{
        sortie.writeObject(nom_fichier);
        }
        catch(NullPointerException e)
        {

        }
        cryptage c = new cryptage(nom);
        FileInputStream inf=new FileInputStream(new File(path.getAbsolutePath()));

        ObjectOutputStream out=new ObjectOutputStream(sock.getOutputStream());

        byte buf[] = new byte[1024];
        int n;
        while((n=inf.read(buf))!=-1){
        out.write(buf,0,n);
        }
        // inf.close();
        // out.reset();
        // out.reset();

        }

        catch (NullPointerException e)
        {
        System.out.println("Serveur not connected");

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }

        };

        ActionListener listenerbtconnect = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try {
        servsock = new ServerSocket(13267);

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        System.out.println("Waiting...");
        connect.setText("Waiting...");

        try {
        sock = servsock.accept();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.out.println("Accepted connection : " + sock);
        connect.setText("server connected");

        }};

        ActionListener listenerquit = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Exit");
        try {
        sock.close();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.exit(0);

        }};

        ActionListener listenerchoose = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Choose a file");
        System.out.println("LOG : Select a file ...");
        file_path.setText("");
        JFileChooser dirFileChooser = new JFileChooser();

        String approve = new String("CHOOSE FILE");
        // Le bouton pour valider l'enregistrement portera la

        dirFileChooser.showDialog(dirFileChooser, approve); // Pour afficher le JFileChooser...

        try{
        System.out.println( dirFileChooser.getSelectedFile().getPath());

        nom_fichier= dirFileChooser.getSelectedFile().getName();
        path=dirFileChooser.getSelectedFile();

        }
        catch(NullPointerException e)
        {
        }
        System.out.println("name of the file "+ nom_fichier);
        file_path.setText("selected file: "+ nom_fichier);

        try {
        FileInputStream fis = new FileInputStream(dirFileChooser.getSelectedFile());
        byte[] buffer = new byte[1024]; //Récupération du contenu du fichier dans une variable de type byte
        // fis.read(buffer); //Lecture du contenu de la variable buffer

        try {
        for (int readNum; (readNum = fis.read(buffer)) != -1;) {
        bos.write(buffer, 0, readNum); //no doubt here is 0
        //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
        System.out.println("read " + readNum + " bytes,");
        }
        } catch (IOException ex) {

        }
        } catch (IOException ex) {

        }

        }};

        ActionListener listeneropen = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println("LOG : Select a file ...");
        JFileChooser dirFileChooser = new JFileChooser();

        if(dirFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        System.out.println( dirFileChooser.getSelectedFile().getPath());
        nom_fichier= dirFileChooser.getSelectedFile().getName();
        System.out.println("name of the file"+ nom_fichier);

        //ouverture du fichier
        Desktop desk= Desktop.getDesktop();
        try {
        desk.open(dirFileChooser.getSelectedFile());
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }};

        @Override
        public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        }

        public static void main(String[] args) {
        ChatTransferServer appli = new ChatTransferServer();

        }

        }

        0

      3. import java.awt.BorderLayout;
        import java.awt.Container;
        import java.awt.Desktop;
        import java.awt.GridLayout;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;
        import java.io.ByteArrayOutputStream;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.ObjectInputStream;
        import java.io.ObjectOutputStream;
        import java.net.Socket;
        import java.net.UnknownHostException;

        import javax.swing.JButton;
        import javax.swing.JComboBox;
        import javax.swing.JFileChooser;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JMenu;
        import javax.swing.JMenuBar;
        import javax.swing.JMenuItem;
        import javax.swing.JOptionPane;
        import javax.swing.JPanel;
        import javax.swing.JTextField;
        import javax.swing.filechooser.FileFilter;

        public class ChatTransferClient extends JFrame implements ActionListener{

        private static String key;
        public static String nom_fichier; //pour le chemin du fichier
        private JTextField file_path;
        private JPanel pan= new JPanel(new GridLayout(2,1));
        private JPanel pan_connexion= new JPanel(new GridLayout(3,2));

        private JTextField address;
        private JLabel name_address;
        private JMenuBar fileMenuBar;
        private JMenu fileMenu;
        private JMenuItem filechoose;
        private JMenuItem fileQuit;
        private JButton btconnect = new JButton("connexion");
        private JButton btFile = new JButton("encrypt file and send");
        private JButton btreceive = new JButton("Receive");
        private JComboBox liste;
        private JTextField connec;
        private Container c ;

        private String path;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        static boolean connect=false;
        static Socket sock;

        public static String clé_client;
        /** Creates a new instance of Client */
        public ChatTransferClient() {
        super("Transfer secure file client");
        //installation des composants graphique
        //pour le menu
        fileMenuBar = new JMenuBar();
        fileMenu = new JMenu("Edit");
        filechoose= new JMenuItem("Choose file");
        fileQuit = new JMenuItem("Sign out");

        fileMenuBar.add(fileMenu);
        fileMenu.add(filechoose);
        fileMenu.add(fileQuit);

        //ajout des listeners
        fileQuit.addActionListener(listenerquit);
        filechoose.addActionListener(listenerchoose);
        btconnect.addActionListener(listenerbtconnect);
        btreceive.addActionListener(listenerbtreceive);

        // sur le conteneur......
        c = getContentPane();

        Object[] elements = new Object[]{"Encryption Ceasare", "Advanced Encryption Ceasare (with thumbnail)"};
        liste = new JComboBox(elements);

        name_address= new JLabel("Peer Address");
        address=new JTextField(10);
        connec=new JTextField(10);
        file_path= new JTextField(15);
        file_path.setFocusable(false);
        pan_connexion.add(name_address);
        pan_connexion.add(address);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(connec);
        pan_connexion.add(new JLabel(""));
        pan_connexion.add(btconnect);

        pan.add(file_path);
        // pan.add(this.liste);
        pan.add(btreceive);
        c.add(pan,BorderLayout.SOUTH);
        c.add(pan_connexion,BorderLayout.NORTH);

        setSize(450,200);
        // setJMenuBar(fileMenuBar);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        connec.setText("client disconnected");

        }

        ActionListener listenerquit = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Exit");
        try {
        sock.close();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.exit(0);

        }};

        ActionListener listenerchoose = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub
        System.out.println(">>Choose a file");
        System.out.println("LOG : Select a file ...");
        file_path.setText("");
        JFileChooser dirFileChooser = new JFileChooser();

        if(dirFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        try{
        System.out.println( dirFileChooser.getSelectedFile().getPath());
        nom_fichier= dirFileChooser.getSelectedFile().getName();

        }
        catch(NullPointerException e)
        {

        }
        System.out.println("name of the file "+ nom_fichier);
        file_path.setText("selected file: "+ nom_fichier);

        try {
        FileInputStream fis = new FileInputStream(dirFileChooser.getSelectedFile());
        byte[] buffer = new byte[1024]; //Récupération du contenu du fichier dans une variable de type byte
        // fis.read(buffer); //Lecture du contenu de la variable buffer

        try {
        for (int readNum; (readNum = fis.read(buffer)) != -1;) {
        bos.write(buffer, 0, readNum); //no doubt here is 0
        //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
        System.out.println("read " + readNum + " bytes,");
        }
        } catch (IOException ex) {

        }
        } catch (IOException ex) {

        }

        }};

        ActionListener listenerbtreceive = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try
        {
        int filesize=6022386; // filesize temporary hardcoded

        long start = System.currentTimeMillis();
        int bytesRead;
        int current = 0;
        // localhost for testing

        String nom=JOptionPane.showInputDialog(null,"Entrez la clé de decryptage correspondante :","Saisie de la clé",JOptionPane.QUESTION_MESSAGE);

        //recuperation name file
        ObjectInputStream entree = new ObjectInputStream(sock.getInputStream());
        String message= "";
        try
        {
        message = (String)entree.readObject();
        }
        catch (IOException e)
        {

        } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        System.out.println("le fichier est "+ message);
        file_path.setText("Receiveé file "+message);
        // receive file
        byte [] mybytearray = new byte [filesize];
        JFileChooser dirFileChooser = new JFileChooser();
        String approve = new String("SAVE");
        // Le bouton pour valider l'enregistrement portera la

        dirFileChooser.setSelectedFile(new File (message));
        if(dirFileChooser.showDialog(dirFileChooser, approve) == JFileChooser.APPROVE_OPTION)
        dirFileChooser.getSelectedFile();
        try{

        System.out.println("Server>> decryption : clé "+ nom);
        cryptage c = new cryptage(nom);

        ObjectInputStream in=new ObjectInputStream(sock.getInputStream());

        byte buf[] = new byte[1024];
        int n=0;

        FileOutputStream out =new FileOutputStream(new File(dirFileChooser.getSelectedFile().toString()));
        // System.out.println(dirFileChooser.getSelectedFile().toString());
        //ici pbleme
        while((n=in.read(buf))!=-1){
        out.write(buf,0,n);
        }

        // in.reset();
        // out.close();

        n=0;

        }
        catch(NullPointerException e)
        {

        }
        }

        catch (NullPointerException e)
        {
        System.out.println("client not connected");

        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

        }

        };

        ActionListener listenerbtconnect = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent act) {
        // TODO Auto-generated method stub

        try {
        if (address.getText().compareTo("")!=0)
        { sock = new Socket(address.getText(),13267);
        System.out.println("connected to " +address.getText());
        }
        else
        System.out.println("Pease enter your ip adresse");
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        System.out.println("Connecting...");
        connec.setText("client connecting");

        }

        };

        @Override
        public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        }

        public static void main(String[] args) {
        ChatTransferClient appli = new ChatTransferClient();
        }

        }
        0
      4. Modérateur
        Tu n'aurais pas la classe cryptage tant qu'on y est ?
        0
      5. lol ok attends
        0