Bonjour,

voilà mon problème : j'ai un client et un serveur. Je désire transmettre un fichier de l'un à l'autre, mais le transfert ne s'effectue pas correctement :

il s'interrompt en cours de route, et ne sont donc pas complet.

voilà ma classe Client :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
import java.io.*;
import java.net.*;
 
public class Client {
    public static final int port = 6020;
    private Socket client;
    private static DataInputStream dataIn;
    private static FileOutputStream fos;
    private File fichier;
 
    public static void main(String args[]) throws SocketException,IOException {
        Socket client = null;
        String s;
 
        try {
            int i;
            client = new Socket("122.122.1.4", port);
            dataIn = new DataInputStream(client.getInputStream());
            System.out.println("connection");
            File fichier = new File("C:\\testClientServeur_to\\new_env.txt");
            fos = new FileOutputStream(fichier); // Ecriture dans le fichier
            while((i = dataIn.read()) != -1)
                fos.write(i);
        } catch(Exception e) {
            System.out.println("Erreur : "+e);
        }
        try { client.close(); } catch (IOException e2) {}// fermeture socket
    }
 
}



et ma classe serveur :



Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
import java.io.*;
import java.net.*;
import java.util.*;
 
public class Serveur extends Thread {
    static final int port = 6020;
    private static ServerSocket socketListener;
    private static File fileToSend = new File("C:\\testClientServeur_from\\env.txt");
    private static File fileToSend2;
    private static Socket client;
    private static DataOutputStream dataOut;
    private static FileInputStream fis = null;
 
    //initialiser le socket serveur
    public static void fileSender(int port,File fileToSend) throws IOException {
        fileToSend2 = fileToSend;
        System.out.println("Fichier = "+fileToSend2);
 
        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 static void fileTransfer(Socket client,File 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 static void main(String args[]) throws UnknownHostException,SocketException,IOException{
        fileSender(port, fileToSend);
        try {
            while(true) {
                client = socketListener.accept();
                System.out.println("Socket accepté = "+client.toString());
                fileTransfer(client,fileToSend);
                break;
            }
        } catch(IOException ioe) {
            System.out.println("Erreur d'IO : "+ioe);
        }
    }
 
}