Socket

Résolu
emma28. Messages postés 19 Statut Membre -  
emma28. Messages postés 19 Statut Membre -
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. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. emma28. Messages postés 19 Statut Membre
     
    mais en fait mm quand je n'encrypte pas ça marche pas, c'est le objectinputstream qui a un probleme j pense
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  3. emma28. Messages postés 19 Statut Membre
     
    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. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  4. emma28. Messages postés 19 Statut Membre
     
    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. KX Messages postés 19031 Statut Modérateur 3 020
       
      Je n'avais pas compris que tu faisais plusieurs envois, le mieux serait que tu montres ton code complet pour te corriger.
      0
    2. emma28. Messages postés 19 Statut Membre
       
      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. emma28. Messages postés 19 Statut Membre
       
      et la le client
      0
    4. emma28. Messages postés 19 Statut Membre
       
      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. emma28. Messages postés 19 Statut Membre
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. emma28. Messages postés 19 Statut Membre
     
    ok mais c'est long t prévenu

    j vais t envoyer le serveur là
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Utilises les balises de code (elles sont à côté des boutons gras italique et souligné)
      0
    2. emma28. Messages postés 19 Statut Membre
       


      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. emma28. Messages postés 19 Statut Membre
       

      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. KX Messages postés 19031 Statut Modérateur 3 020
       
      Tu n'aurais pas la classe cryptage tant qu'on y est ?
      0
    5. emma28. Messages postés 19 Statut Membre
       
      lol ok attends
      0