Bonsoir tout le monde,
je développe une petite application de transfert de fichiers en utilisant TCP.
voici le code du serveur:
ce code envoie une partie de fichier et non pas le fichier complet au client. noter que j'ai utilisé flush() pour vider le buffer. Mais quand je remplace flush() par close(), ce code envoie le fichier au complet sans aucune perte. ce comportement me parait bizarre n'est ce pas!. une autre remarque: je peux utiliser ce code, sans socket, pour copier un fichier avec succès (sans close() et seulement avec flush() à la fin).
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 package tcp.ftp; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class FTPServer { public static void main(String[] args) { new FTPServer().go(); } void go() { try { ServerSocket server = new ServerSocket(2015); System.out.println("server is running ....!"); while (true) { Socket socket = server.accept(); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String file = reader.readLine(); System.out.println("file to be downloaded is : " + file); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream()); while (true) { int octet = bis.read(); if (octet == -1) { break; } bos.write(octet); } bos.flush(); //bos.close(); } } catch (IOException ex) { System.out.println(ex.getMessage()); } } }
Partager