Transporter un fichier avec les Sockets
vanrostand
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
Je ss u Etudiant de niveau 3. Je ss amené dans mon projet de fin d'etude a creer une application client serveur dans laquelle le client se connecte chez le serveur pour lui demander un fichier.
Pour l'instant mon programme (ci dessous) n'est capable de transporter qu'un caractere mm lorsque je met un buffered a l'entree. je sais pas ci quelque peux m'aider!!!!
Programmme coté serveur:
//Package à importer afin d'utiliser l'objet File
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
public class tp6 {
public static void main(String[] args) throws IOException {
while(true)
{
ServerSocket server = new ServerSocket(2000);
Socket versclient = new Socket();
versclient =server.accept();
OutputStream Fsortie = versclient.getOutputStream();
FileInputStream fis;
BufferedInputStream bis;
FileChannel fc;
FileOutputStream fos;
try {
//Création des objets
fis = new FileInputStream(new File("test3.txt"));
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(new File("test4.txt"));
//Démarrage du chrono
long time = System.currentTimeMillis();
//Lecture
while(bis.read() != -1);
//Temps d'exécution
System.out.println("Temps d'exécution avec un buffer conventionnel : " + (System.currentTimeMillis() - time));
//Re-création d'un flux de fichier
fis = new FileInputStream(new File("test3.txt"));
//On récupère le canal
fc = fis.getChannel();
//On en déduit la taille
int size = (int)fc.size();
//On crée un buffer
//correspondant à la taille du fichier
ByteBuffer bBuff = ByteBuffer.allocate(size);
//Démarrage du chrono
time = System.currentTimeMillis();
//Démarrage de la lecture
fc.read(bBuff);
//On prépare à la lecture avec l'appel à flip
bBuff.flip();
//Affichage du temps d'exécution
System.out.println("Temps d'exécution avec un nouveau buffer : " + (System.currentTimeMillis() - time));
//Vu que nous avons pris un buffer de byte
//Afin de récupérer les données, nous pouvons utiliser
//un tableau de byte
//La méthode array retourne un tableau de byte
byte[] tabByte = bBuff.array();
BufferedOutputStream Bsortie = new BufferedOutputStream(Fsortie);
//fos.write(tabByte); //Le tableau de bits de taille variable est ensuite transmis sur le
Bsortie.write(tabByte);
//flux de fichier sortant.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("copie terminée");
Fsortie.close();
versclient.close();
server.close();
}
}
}
Programme coté client:
//Package à importer afin d'utiliser l'objet File
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
public class tp6 {
public static void main(String[] args) {
FileInputStream fis;
BufferedInputStream bis;
FileChannel fc;
FileOutputStream fos;
try {
//Création des objets
fis = new FileInputStream(new File("test3.txt"));
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(new File("test4.txt"));
//Démarrage du chrono
long time = System.currentTimeMillis();
//Lecture
while(bis.read() != -1);
//Temps d'exécution
System.out.println("Temps d'exécution avec un buffer conventionnel : " + (System.currentTimeMillis() - time));
//Re-création d'un flux de fichier
fis = new FileInputStream(new File("test3.txt"));
//On récupère le canal
fc = fis.getChannel();
//On en déduit la taille
int size = (int)fc.size();
//On crée un buffer
//correspondant à la taille du fichier
ByteBuffer bBuff = ByteBuffer.allocate(size);
//Démarrage du chrono
time = System.currentTimeMillis();
//Démarrage de la lecture
fc.read(bBuff);
//On prépare à la lecture avec l'appel à flip
bBuff.flip();
//Affichage du temps d'exécution
System.out.println("Temps d'exécution avec un nouveau buffer : " + (System.currentTimeMillis() - time));
//Vu que nous avons pris un buffer de byte
//Afin de récupérer les données, nous pouvons utiliser
//un tableau de byte
//La méthode array retourne un tableau de byte
byte[] tabByte = bBuff.array();
fos.write(tabByte); //Le tableau de bits de taille variable est ensuite transmis sur le
//flux de fichier sortant.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Je ss u Etudiant de niveau 3. Je ss amené dans mon projet de fin d'etude a creer une application client serveur dans laquelle le client se connecte chez le serveur pour lui demander un fichier.
Pour l'instant mon programme (ci dessous) n'est capable de transporter qu'un caractere mm lorsque je met un buffered a l'entree. je sais pas ci quelque peux m'aider!!!!
Programmme coté serveur:
//Package à importer afin d'utiliser l'objet File
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
public class tp6 {
public static void main(String[] args) throws IOException {
while(true)
{
ServerSocket server = new ServerSocket(2000);
Socket versclient = new Socket();
versclient =server.accept();
OutputStream Fsortie = versclient.getOutputStream();
FileInputStream fis;
BufferedInputStream bis;
FileChannel fc;
FileOutputStream fos;
try {
//Création des objets
fis = new FileInputStream(new File("test3.txt"));
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(new File("test4.txt"));
//Démarrage du chrono
long time = System.currentTimeMillis();
//Lecture
while(bis.read() != -1);
//Temps d'exécution
System.out.println("Temps d'exécution avec un buffer conventionnel : " + (System.currentTimeMillis() - time));
//Re-création d'un flux de fichier
fis = new FileInputStream(new File("test3.txt"));
//On récupère le canal
fc = fis.getChannel();
//On en déduit la taille
int size = (int)fc.size();
//On crée un buffer
//correspondant à la taille du fichier
ByteBuffer bBuff = ByteBuffer.allocate(size);
//Démarrage du chrono
time = System.currentTimeMillis();
//Démarrage de la lecture
fc.read(bBuff);
//On prépare à la lecture avec l'appel à flip
bBuff.flip();
//Affichage du temps d'exécution
System.out.println("Temps d'exécution avec un nouveau buffer : " + (System.currentTimeMillis() - time));
//Vu que nous avons pris un buffer de byte
//Afin de récupérer les données, nous pouvons utiliser
//un tableau de byte
//La méthode array retourne un tableau de byte
byte[] tabByte = bBuff.array();
BufferedOutputStream Bsortie = new BufferedOutputStream(Fsortie);
//fos.write(tabByte); //Le tableau de bits de taille variable est ensuite transmis sur le
Bsortie.write(tabByte);
//flux de fichier sortant.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("copie terminée");
Fsortie.close();
versclient.close();
server.close();
}
}
}
Programme coté client:
//Package à importer afin d'utiliser l'objet File
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
public class tp6 {
public static void main(String[] args) {
FileInputStream fis;
BufferedInputStream bis;
FileChannel fc;
FileOutputStream fos;
try {
//Création des objets
fis = new FileInputStream(new File("test3.txt"));
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(new File("test4.txt"));
//Démarrage du chrono
long time = System.currentTimeMillis();
//Lecture
while(bis.read() != -1);
//Temps d'exécution
System.out.println("Temps d'exécution avec un buffer conventionnel : " + (System.currentTimeMillis() - time));
//Re-création d'un flux de fichier
fis = new FileInputStream(new File("test3.txt"));
//On récupère le canal
fc = fis.getChannel();
//On en déduit la taille
int size = (int)fc.size();
//On crée un buffer
//correspondant à la taille du fichier
ByteBuffer bBuff = ByteBuffer.allocate(size);
//Démarrage du chrono
time = System.currentTimeMillis();
//Démarrage de la lecture
fc.read(bBuff);
//On prépare à la lecture avec l'appel à flip
bBuff.flip();
//Affichage du temps d'exécution
System.out.println("Temps d'exécution avec un nouveau buffer : " + (System.currentTimeMillis() - time));
//Vu que nous avons pris un buffer de byte
//Afin de récupérer les données, nous pouvons utiliser
//un tableau de byte
//La méthode array retourne un tableau de byte
byte[] tabByte = bBuff.array();
fos.write(tabByte); //Le tableau de bits de taille variable est ensuite transmis sur le
//flux de fichier sortant.
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
A voir également:
- Transporter un fichier avec les Sockets
- Fichier bin - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
1 réponse
Quelle est ta question exactement ?
Pour le transfert complet d'un fichier regarde ici pour partir du bon pied :
Envoi des fichiers par des sockets java
Pour le transfert complet d'un fichier regarde ici pour partir du bon pied :
Envoi des fichiers par des sockets java