Bonjour à tous,

J'ai fait un programme qui sert à envoyer des fichiers depuis mon appareil Android vers un dossier de mon pc.

Mon appareil Android n'est pas un smartphone, c'est un terminal de collecte de données que je dépose dans une sorte de borne qui le connecte au réseau.

Le programme fonctionne correctement mais j'ai remarqué une faille: lorsque je dépose mon appareil dans la borne, si j'appui sur le boutton qui déclenche l'envoi des fichiers un peu tot j'ai les erreurs suivantes qui s'affichent sur mon pc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.fill(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at java.io.DataInputStream.readInt(Unknown Source)
	at FileReader.main(FileReader.java:26)

voici le code coté 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
public class FileReader {
 
	private static ServerSocket serverSocket;
	private static Socket clientSocket;
	private static BufferedInputStream bis;
	private static DataInputStream dis;
 
 
		public static void main(String[] args) {
		String dirPath = "C:\\docPda\\prelevement\\";
		try {
			serverSocket = new ServerSocket(7800);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			while (true) {
				try {
 
					clientSocket = serverSocket.accept();
 
 
					bis = new BufferedInputStream(clientSocket.getInputStream());
					dis = new DataInputStream(bis);
					int filesCount = dis.readInt();
						File[] files = new File[filesCount];
 
						for (int i = 0; i < filesCount; i++) {
							long fileLength = dis.readLong();
							String fileName = dis.readUTF();
 
							files[i] = new File(dirPath + "/" + fileName);
 
							FileOutputStream fos = new FileOutputStream(files[i]);
							BufferedOutputStream bos = new BufferedOutputStream(fos);
 
							for (int j = 0; j < fileLength; j++)
								bos.write(bis.read());
 
							bos.close();
						}
							clientSocket.close();
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		} finally {
			try {
				serverSocket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}


le code coté client (Android):

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
 
public class FileSender extends AsyncTask<String, Integer, String> {
 
    private String ip;
    private int port;
    private Boolean bool;
 
    public FileSender(String ip, int port, Boolean bool){
        this.ip = ip;
        this.port = port;
        this.bool = bool;
    }
 
    @Override
    protected String doInBackground(String... serverAdd) {
        String directory;
        if (this.bool) {
             directory = Environment.getExternalStorageDirectory() + "/" + "traca";
        }
        else {
            directory = Environment.getExternalStorageDirectory() + "/" + "GetSignature";
 
        }
            Socket socket;
 
            File[] files = new File(directory).listFiles();
            if (files.length > 0) {
                try {
                    socket = new Socket(ip, port);
 
                    BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
                    DataOutputStream dos = new DataOutputStream(bos);
 
                    dos.writeInt(files.length);
 
                    for (File file : files) {
                        long length = file.length();
                        dos.writeLong(length);
 
                        String name = file.getName();
                        dos.writeUTF(name);
 
                        FileInputStream fis = new FileInputStream(file);
                        BufferedInputStream bis = new BufferedInputStream(fis);
 
                        int theByte = 0;
                        while ((theByte = bis.read()) != -1) bos.write(theByte);
 
                        bis.close();
 
                        file.delete();
                    }
                    socket.close();
                    dos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        return null;
    }
}

et enfin l'expression que j’exécute à l'appui du boutton:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
                FileSender s = new FileSender(prefs.getString("ip_adress", null),
                        Integer.valueOf(prefs.getString("port_dest", null)),
                        true);
                s.execute();


En espérant m’être fait comprendre