Bonjour,
J'ai une application C/S qui permet d'envoyer des fichier via un socketssl.
Tout marche nikel ... sauf que le debit est tres tres pourris.En transferant un fichier de 800ko, j'ai une vitesse de 1ko/s em local !!
Voila le bout de code qui envoi le fichier cote client
Voici le bout de code cote 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 // envoi la taille du fichier au serveur String size = "#" + fic.length() + "#" + fic.getName() + "#\n"; out.write(size.getBytes()); int limite = new Long(fic.length()).intValue(); // envoi le fichier via le tableau de byte for (int i = 0; i < limite; i++) { byte[] temp = new byte[1]; temp[0] = ficBinaire[i]; out.write(temp); out.flush(); // System.out.println(i); } fluxFic.close();
Tout n'est pas parfait (notement le passage des info sur le fichier qui interdit un # dans le nom du fichier ^^), mais ca marche , le probleme viens du debit.
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 String temp = inString.readLine(); if(temp == null){return true;} StringTokenizer strTk = new StringTokenizer(temp, "#"); long Size = Integer.parseInt(strTk.nextToken()); String OldName = strTk.nextToken(); int indexExt = OldName.lastIndexOf('.'); String FicName = OldName.substring(0, indexExt) + "_copy" + OldName.substring(indexExt); FileOutputStream fic = new FileOutputStream(FicName); long k = 0; byte[] tmp = new byte[1]; in.read(tmp); long Start = System.currentTimeMillis(); while (k < Size - 1) { fic.write(tmp); in.read(tmp); k++; } fic.close(); // statistiques long End = System.currentTimeMillis(); long nbOctet = k / 8; long vitesse = nbOctet / ((End - Start) / 1000 + 1); System.out.println("FIN RECEPTION : " + nbOctet + " octets copie," + vitesse + " oct/sec n " + FicName);
Partager