problème d'envoie de fichier avec socket
Bonjour :D
Je vous décris mon problème:
j'ai une application avec plusieurs bouton deux entre eux sont les boutons "envoie" qui envoie un fichier avec les socket et "réception" qui reçoit le fichier.
quand je click sur le bouton "envoie" toute l'application se bloque c'ad impossible de cliquer sur un autre bouton. J'ai donc ouvert la même application une deuxième fois(les deux applications ouvertes en même temps une bloqué et l'autre fonctionne) puis cliqué sur le bouton "réception" de la deuxième application pour que tout se libère donc c'est bon le fichier est transmis et reçus mais même problème, après clique sur le bouton réception de l'application 2 elle se bloque!!!!
J'ai testé l'application sans envoie et réception de fichier et elle fonctionne impeccablement c'est pour cela que je pense qu'il y a un problème au niveau de ces deux programmes:
voici les programme envoie de fichier et réception de fichier
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| package chiffrement;
import java.net.*;
import java.io.*;
import java.util.*;
public class FileSender extends Thread
{
private ServerSocket socketListener;
private Socket s;
private File fileToSend;
public FileSender(int port,File fileToSend)
{
this.fileToSend = fileToSend;
System.out.println("Fichier = "+fileToSend);
try
{
socketListener = new ServerSocket(port); //Ce ServerSocket écoute les tentatives de connexion
}
catch(IOException e)
{
System.err.println("Impossible découter sur le port.");
}
start();
}
public class FileTransfer extends Thread
{
private File fileToSend;
private Socket client;
private DataOutputStream dataOut;
private FileInputStream fis = null;
/** Creates a new instance of FileTransfer */
public FileTransfer(Socket client,File fileTosend)
{
super("ServerMultiThread");
this.client=client;
this.fileToSend = fileTosend;
try
{
dataOut = new DataOutputStream(client.getOutputStream());
}
catch(IOException ioe)
{
System.out.println("Erreur lors de la création du flux de sortie : "+ioe);
}
boolean fileExists = true;
try
{
fis = new FileInputStream(fileToSend); //Flux de lecture dans le fichier
System.out.println("FileInputStream crée = "+fis.toString());
}
catch (FileNotFoundException e)
{
fileExists = false;
}
if (fileExists)
{
//Création d"un buffer de 4K
byte[] buffer= new byte[4096];
int bytes = 0;
try
{
//Envoie du nom du fichier dans le flux de sortie
//dataOut.writeUTF(fileToSend.getName());
//Copie du fichier dans le flux de sortie
while((bytes = fis.read(buffer)) != -1)
dataOut.write(buffer, 0, bytes);
fis.close();
}
catch(IOException ioe)
{
System.out.println("Erreur d'IO : "+ioe);
}
}
}
}
public void run()
{
try
{
while(true)
{
s = socketListener.accept();
System.out.println("Socket accepté = "+s.toString());
new FileTransfer(s,fileToSend);
break;
}
}
catch(IOException ioe)
{
System.out.println("Erreur d'IO : "+ioe);
}
}
public static void main (String[] args) throws IOException{
File fichier = new File("C:/Users/workspace/Projet/src/chiffrement/fichier1.txt");
FileSender o=new FileSender(4004,fichier);
o.run();
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| package chiffrement;
import java.net.*;
import java.io.*;
import java.util.*;
public class FileReceiver
{
private Socket client;
private DataInputStream dataIn;
private FileOutputStream fos;
private File fichier;
/** Creates a new instance of FileReceiver */
public FileReceiver(String file)
{
try
{
int i;
client = new Socket("127.0.0.1",4004); //Connexion au serveur
dataIn = new DataInputStream(client.getInputStream());
File fichier = new File(file);
fos = new FileOutputStream(fichier); // Ecriture dans le fichier
while((i = dataIn.read()) != -1)
fos.write(i);
}
catch(Exception e)
{
System.out.println("Erreur : "+e);
}
}
public static void main (String[] args){
FileReceiver p=new FileReceiver("C:/Users/workspace/brouillon/src/data.txt");
}
} |
merci à vous