Problème de Transfert de fichiers en TCP
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
Code:
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 Serveur
Code:
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 ();
}
}
} |
Classe ServeurTCP
Code:
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 !" );
}
}
}
} |
Merci de votre aide !