Bonjour,
Je suis nouveau sur le forum.
Je suis étudiant et je dois créer un système de transfert de fichiers en java avec différents protocoles.
J'ai commencé par le TCP.
Petit problème : le transfert marche bien mais seulement si la taille du fichier est supérieur à 4172.
Voici mon code :
Classe ClientTCP
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 public class ClientTCP { public void envoi ( String fileName, String filePath ) throws Exception { Socket socket; try { socket = new Socket ( "localhost", 7778 ); } catch ( Exception e ) { throw new Exception ( "Impossible de créer la connexion !" ); } File file = new File ( filePath ); if ( file.exists () ) { OutputStream out = (OutputStream) socket.getOutputStream (); long fileSize = file.length (); long numberOfPath = fileSize / 4096; System.out.println ( "Passages supposés : " + numberOfPath ); InputStream in = new BufferedInputStream ( new FileInputStream ( file ) ); ByteArrayOutputStream output = new ByteArrayOutputStream (); BufferedOutputStream tampon = new BufferedOutputStream ( output ); int read = in.read (); int[] toWrite = new int[4096]; int compteur = 0; long pathNumerber = 0; output.write ( fileName.getBytes (), 0, fileName.getBytes ().length ); output.flush (); while ( read > -1 ) { toWrite[compteur] = read; read = in.read (); compteur++; if ( compteur == 4096 ) { compteur = 0; pathNumerber++; for ( int x = 0; x < 4096; x++ ) tampon.write ( toWrite[x] ); out.write ( output.toByteArray () ); output.reset (); System.out.println ( "Avancement : " + ( float ) pathNumerber / numberOfPath * 100 + "%" ); } } for ( int x = 0; x < compteur; x++ ) tampon.write ( toWrite[x] ); tampon.flush (); out.write ( output.toByteArray () ); out.flush (); in.close (); tampon.close (); socket.close (); } else throw new Exception ( "Fichier non trouvé" ); } }
Classe ServeurTCP
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 public class Server { private static ServerSocket socket; private static Thread thread; public static void main ( String[] args ) { try { String PORT = JOptionPane.showInputDialog("Entrez le port :"); socket = new ServerSocket ( Integer.parseInt(PORT) ); thread = new Thread ( new ServeurTCP ( socket ) ); thread.start (); } catch ( IOException e ) { e.printStackTrace (); } } }
Merci de votre aide !
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 public class ServeurTCP implements Runnable { private ServerSocket socketServer; public ServeurTCP ( ServerSocket socketServer ) { this.socketServer = socketServer; } public void run () { while ( true ) { try { Socket serviceSocket = socketServer.accept (); int read; InputStream input = serviceSocket.getInputStream (); BufferedInputStream inBuffer = new BufferedInputStream ( input ); byte buf[] = new byte[50000]; read = inBuffer.read ( buf ); OutputStream out = new FileOutputStream ( new String ( buf, 0, read ) ); BufferedOutputStream outBuffer = new BufferedOutputStream ( out ); read = inBuffer.read (); int compteur = 0; while ( read > -1 ) { outBuffer.write ( read ); read = inBuffer.read (); compteur++; } outBuffer.write ( read ); outBuffer.flush (); outBuffer.close (); inBuffer.close (); out.flush (); out.close (); input.close (); serviceSocket.close (); } catch ( Exception e ) { System.out.println ( "Erreur avec la connexion ou la réception !" ); } } } }
Partager