package Transfert;
import java.net.*;
//import java.awt.Dimension;
//import java.awt.GridBagConstraints;
//import java.awt.GridBagLayout;
//import java.awt.Toolkit;
import java.io.*;
import java.util.Date;
import java.util.StringTokenizer;
import javax.swing.*;
public class transfert {
boolean transfert=false;
public boolean connexion_client=true;
public boolean connexion_server;
public boolean fichier_transfiré=false;
static final int ok=1 , stop=2;
public File[] subfiles;
public String[] subfilesrecep;
long taille_traite_envoi;
long taille_traite_recep;
long taille_fichier;
public int taille_tabenvoi;
public int taille_tabrecep;
public int num_fichier;
int taille_buffer; // la taille du buffer d'envoie
public ServerSocket serveur; // serveurSocket
public Socket socket; // la socket de réception et d'envoie
int port_serveur; // le port ou on
DataInputStream input; // flux d'entrer
DataOutputStream output; //flux de sortie
File fichier;
String vitesse = "";
public JProgressBar bar;
//public String reper;
public String repert ="C:"+File.separator+"Répertoire";
//public String reper ="C:"+File.separator+"Documents and Settings"+File.separator+"Mohcen"+File.separator+"Bureau"+File.separator+"Répertoire";
// le constucteur
public transfert(int buffer,int port){
port_serveur=port;
taille_buffer=buffer;
}
public transfert(int port){
port_serveur = port;
}
/************************************************
************************************************
* La gestion des flux * *
* *
************************************************
************************************************/
//la creation du serveursocket
public boolean creer_serveur(){
boolean bool=true;
try{
serveur=new ServerSocket(port_serveur);
}catch(Exception e){
bool=false;
e.printStackTrace();
}
return bool;
}
//l'attante de connexion
public boolean attente_connexion(){
boolean bool=true;
try{
socket=serveur.accept();
}catch(SocketException e){
bool=false;
}catch(Exception e){
bool=false;
e.printStackTrace();
}
return bool;
}
// connexion au serveur
public boolean conexion(String ip){
boolean bool=true;
try{
socket=new Socket(ip,port_serveur);
}catch(Exception e){
bool=false;
e.printStackTrace();
}
return bool;
}
//obtenir les flux de données ( entrée et sortie)
public void getFlux(){
try{
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
}catch(Exception e){
e.printStackTrace();
}
}
//Fermer les flux
public void close_flux_client(){
try{
if(input!=null )
input.close(); //la fermeture de flux d'entrée
if(output!=null )
output.close(); //la fermeture de flux de sortie
if(socket!=null){
socket.close(); //la fermeture du socket
//connexion_client=false;
}
}catch(Exception e){
e.printStackTrace();
}
}
//*********************************
public void close_flux_server(){
try{
if(input!=null )
input.close(); //la fermeture de flux d'entrée
if(output!=null )
output.close(); //la fermeture de flux de sortie
if(serveur!=null ){
serveur.close(); //la fermeture du serveur
connexion_server=false;
}
}catch(Exception e){
e.printStackTrace();
}
}
//*********************************
//annuler le transfert
public void stop_transfert(){
if(!transfert && serveur!=null)
close_flux_client();
else
transfert=false;
}
//supprimer le fichier reçu lors un echec
public boolean supprime_fichier(){
return fichier.delete();
}
/************************************************
* ******************************************** *
* * La réception des fichiers * *
* * * *
* ******************************************** *
************************************************/
//Supprimer le fichier reçu lors d'un échec
private boolean delFile()
{
return fichier.delete();
}
//signaler qu'on est pret à recevoir le paquet
public void signaler_ok()throws Exception {
output.writeInt(ok);
output.flush();
}
//signaler qu'on stope l'envoie
public void signaler_stop()throws Exception{
output.writeInt(stop);
output.flush();
}
//attente de la taille du buffer à envoyer
public boolean attente_taille_buffer(){
boolean bool=true;
try{
signaler_ok();
taille_buffer = input.readInt();
}catch(Exception e){
bool=false;
}
return bool;
}
//************************attente num fichier*********************************num_fichier
public boolean attente_num_fichier(){
boolean bool=true;
try{
signaler_ok();
num_fichier = input.readInt();
}catch(Exception e){
bool=false;
}
return bool;
}
//************************réception des elts du tableau***********************
public void tableau_elts(){
subfilesrecep = new String[taille_tabrecep];
int i = 0;
while(i<taille_tabrecep){
try{
byte[]reception = new byte[taille_buffer]; //reception du nom ds un tableau de byte
signaler_ok();
int nbByte_lus = input.read(reception, 0, reception.length);
subfilesrecep[i]= new String(reception,0,nbByte_lus);
System.out.println(subfilesrecep[i]);
}catch(Exception e){
e.printStackTrace();
}
i++;
}
}
//*******Attente de la taille du tableau répertoire********************
public boolean attente_taille_tab(){
boolean bool=true;
try{
signaler_ok();
taille_tabrecep = input.readInt();
}catch(Exception e){
bool=false;
}
return bool;
}
//attente de nom de fichier
public String nom_fichier(){
String nomfichier="";
try{
byte[]reception = new byte[taille_buffer]; //reception du nom ds un tableau de byte
signaler_ok();
int nbByte_lus = input.read(reception, 0, reception.length);
nomfichier= new String(reception,0,nbByte_lus);
}catch(Exception e){
e.printStackTrace();
}
return nomfichier;
}
//envoie de la taille de fichier à envoyé
public long attente_taille(){
long taille=0;
try{
signaler_ok();
taille=input.readLong();
taille_fichier = taille;
}catch(Exception e){
e.printStackTrace();
}
return taille;
}
//la réception de fichier
public void reception(String repert,String nomfichier,long taille){
transfert=true;
try{
PrintStream ps = new PrintStream( new FileOutputStream(fichier= new File(repert+File.separator+nomfichier)) );
boolean stopper=false;
String message="";
byte[]reception=null;
int nbByte_lus=0;
taille_traite_recep=0;
fichier_transfiré=true;
//tant qu'on reçoit pas le message de fin de réception
while(!message.equalsIgnoreCase("[END]")&& !message.equalsIgnoreCase("[STOP]")){
if(transfert){
signaler_ok();
reception = new byte[taille_buffer];
nbByte_lus = input.read(reception, 0, reception.length);
taille_traite_recep+=1;
if(nbByte_lus >0){
message= new String(reception,0,nbByte_lus);
if(message.equalsIgnoreCase("[END]")){ //si la fin de réception
System.out.println("