Socket

Résolu/Fermé
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014 - 28 nov. 2013 à 19:14
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014 - 29 nov. 2013 à 03:49
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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 28/11/2013 à 19:29
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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 19:28
mais en fait mm quand je n'encrypte pas ça marche pas, c'est le objectinputstream qui a un probleme j pense
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 nov. 2013 à 19:34
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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 19:34
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 28/11/2013 à 19:57
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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:03
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 nov. 2013 à 20:09
Je n'avais pas compris que tu faisais plusieurs envois, le mieux serait que tu montres ton code complet pour te corriger.
0
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:14
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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:14
et la le client
0
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:14
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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:15
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

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

Posez votre question
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:13
ok mais c'est long t prévenu

j vais t envoyer le serveur là
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 nov. 2013 à 20:14
Utilises les balises de code (elles sont à côté des boutons gras italique et souligné)
0
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:20


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
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:21

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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
28 nov. 2013 à 20:34
Tu n'aurais pas la classe cryptage tant qu'on y est ?
0
emma28. Messages postés 18 Date d'inscription jeudi 28 novembre 2013 Statut Membre Dernière intervention 12 février 2014
28 nov. 2013 à 20:36
lol ok attends
0