Socket java client serveur

Résolu/Fermé
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012 - 9 mai 2012 à 23:41
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012 - 16 mai 2012 à 11:33
Bonjour, tout le monde j'ai un problème

je veux savoir si il y'a un moyen de créer un dossier et dans ce dossier un sous dossier, a partir du client dans la machine ou il y'a le serveur avec java .

je vous remercie.
A voir également:

34 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 mai 2012 à 23:45
Oui, mais il faut le prévoir dans le protocole de communication, car même si c'est le client qui va le demander, ce sera au serveur de créer ce dossier.
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
9 mai 2012 à 23:50
merci KX pour votre réponse mais comment pourais je faire svp
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 mai 2012 à 23:59
Tout dépend de ton protocole. Exemple simple : j'envoie un entier pour dire ce que je vais faire : 1 pour envoyer un fichier, 2 pour le recevoir, 3 pour créer un dossier etc...
Dans chacun des trois cas, on attend juste derrière le nom du fichier/dossier (un String)
Et dans les deux premiers on envoie dans la foulée le contenu par salves d'octets.

Si tu as un tel protocole respecté à la fois par le client et le serveur, c'est très facile de faire ce que tu veux, par exemple si le client veut créer le dossier "Toto" et le sous-dossier "Toto/Titi" :

Le client envoie [3,"Toto"]
Le serveur reçoit [3,"Toto"]
Le serveur créé le répertoire "Toto"
Le client envoie [3,"Toto/Titi"]
Le serveur reçoit [3,"Toto/Titi"]
Le serveur créé le répertoire "Toto/Titi"

Il serait bien vu de faire des messages de confirmation pour informer le client si ça s'est bien passé ou non, mais là encore ce n'est qu'une question de protocole.

NB. J'ai une conception très personnelle de ce que je définis ici comme un "protocole", les puristes m'en voudront peut-être, mais si tu comprends l'idée c'est largement suffisant !
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 00:09
merci KX jai compris l'idée mais le probléme c'est que je suis débutant et je n'ai aucune idée de comment envoyé le message au serveur pour créer le dossier .

merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 00:16
Puisqu'ils sont d'accord sur le protocole, client et serveur vont en être au même point à tout moment. En gros, lorsque le client envoie un entier pour dire l'action qu'il souhaite faire, le serveur attend lui aussi un entier, du coup il saura l'interpréter correctement.
De même, une fois qu'il aura vu que l'entier vaut 3, le serveur sait qu'il va devoir créer un fichier, donc il attend un String qui correspond au nom de ce dossier, String que va lui envoyer le client.

Cela se fait assez bien avec des ObjectOutputStream et ObjectInputStream
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 00:39
merci KX je vais essayer de voir si ça va marché si c possible vous pouvez me donner un petit exemple
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 00:41
Il y a déjà des exemples dans les deux liens de documentation que j'ai donné, en plus ils ont fait ça bien puisque l'exemple de ObjectOutputStream correspond à celui de ObjectInputStream...
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 01:00
merci KX jai réussi a avoir un fichier sur la machine ou il ya le serveur mai le probléme c'est pas un dossier que je reçoi je le recoi comme fichier. voici mon code sur le client :


FileOutputStream fos = new FileOutputStream("c:\\dossier\\"+s);
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeInt(12345);
oos.writeObject("Today");
et voici sur le serveur



FileInputStream fis = new FileInputStream("c:\\dossier\\"+s);
ObjectInputStream ois = new ObjectInputStream(fis);

merci
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 03:39
Bonsoir KX voila jai réussi a prendre le nom du dossier d'une donnée de la colonne de ma table sql et lenvoyer au serveur qui a son tour créer un dossier du nom mais le probléme c'est qu'il se bloque et si je veux envoyé un fichier a ce dossier il ne s'envoi pas merci voici le code.
Client

	public  void Client(String s)
	{
	  
	 
	      int in;
	  
	      byte[] byteArray;
	      File fichier = null;
	      String cheminfichier= null;
	      String IP = "192.168.1.2";
      try
	      {
	      
	          Socket via = new Socket(IP, 1234);
	          if(via.isConnected())
	          {
	            JOptionPane.showMessageDialog(null, "connecté au serveur: " + IP);
	        
	            
	          JFileChooser selector = new JFileChooser();
	          selector.setDialogTitle("choisi le fichier");
	           int resulta = selector.showOpenDialog(null);
	            if (result == JFileChooser.APPROVE_OPTION)
	           
	                fichier = selector.getSelectedFile();
	               
	                cheminfichier = fichiergetPath().toString();
	               
	            }
	            else
	            {via.close();}
	            String m=s;   // c'est le string de la donnée de ma table SQL

	            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(cheminfichier));
	            BufferedOutputStream bos = new BufferedOutputStream(via.getOutputStream());
	          
	         
	            DataOutputStream dos = new DataOutputStream(via.getOutputStream());
	
	            dos.writeUTF(m);
	           
	            
	 
	            byteArray = new byte[8192];
	            while ((in = bis.read(byteArray)) != -1)
	            {  
	            	 
	                bos.write(byteArray,0,in);
	            }
	          bis.close();
	           bos.close();
	             //   ServerSocket.close();
	           
	          
	           // JOptionPane.showMessageDialog(null, "Le Fichier  " + archivo.getName().toString() +
	                                                 //" a bien été envoyé");
	            String oups=archivo.getName();
	            String nom=("/llego.msi/");
	            
	            
	            String gogle="//"+IP+nom+"\""+oups+"\"";
	             gogle1="//"+IP+nom+oups;
	            System.out.println(s);
	            jTextField6.setText(gogle);
	            jTextField3.setText(gogle1);
	           System.out.println(gogle);
	           System.out.println(s);
	         // String gogle= "\\"+"\\"+IP+nom+oups+""\t;
	          
	        
	 
	          }  catch (Exception e) {//JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);
	      }
	}
	   
	  



Le SERVEUR


package serveur;
import java.net.*;
import java.io.*;

import javax.swing.*;
 
class Servidor
{
	
	public String user = System.getProperty("user.name");
	public static String nom = System.getProperty("user.home");
     public static void main (String[] args)
     {
         ServerSocket server;
         Socket connection = null;
 
         DataOutputStream output;
         BufferedInputStream bis;
         BufferedOutputStream bos;
 
         byte[] receivedData;
         int in = 0;
         String file;
 
         try{
             server = new ServerSocket(1234);
             while ( true ) {
                 connection = server.accept();
 
                 receivedData = new byte[8192];
                 bis = new BufferedInputStream(connection.getInputStream());
                 DataInputStream dis = new DataInputStream(connection.getInputStream());
 
               
				//recibimos el nombre del fichero
                 file = dis.readUTF();
                 file = file.substring(file.indexOf('\\')+1,file.length());
                 File directorio = new File("c:\\dossier\\"+file+"\\");
                 directorio.mkdir(); 
              
                bos = new BufferedOutputStream(new FileOutputStream("C:\\dossier\\"+ file));
             
               while ((in = bis.read(receivedData)) != -1){
                   bos.write(receivedData,0,in);
             }
                bos.close();
                 dis.close();
 
               //  JOptionPane.showMessageDialog(null, "Fichier (" + file.toString() + ") Reçu");
             // System.exit(0);
             }
         }catch (Exception e ) {
           //  JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
         }
     }
}
 



Merci infiniment pour votre aide.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 07:03
Dans la classe serveur, tu utilises deux fois connection.getInputStream (pour l'initialisation de bis et de dis), or tu ne devrais t'en servir qu'une fois dans un ObjectInputStream qu'ici n'apparaît pas du tout !!! Pareil pour le client, tu utilises deux fois via.getOutputStream, mais pas d'ObjectOutputStream...
Je me demande donc où est passé notre discussion d'hier soir sur la mise en place d'un protocole de communication client/serveur !
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 09:47
Bonjour KX merci pour votre réponse j'ai déja utiliser ObjectOutputStream mais le probléme c'est que je reçois un fichier qui n'a aucune extension au lieu de créer un dossier sur la machine ou il ya le serveur. ce que je pensais faire c'est envoyé une chaine de caractére comprenant le nom du dossier que je veux créer sur la machine du serveur.


merci .
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 10:27
c'est parce que tu n'as pas distinguer les cas, lorsque tu créés un répertoire il faut utiliser mkdir, mais dans ton code je ne le vois nul part !
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 10:35
si KX je l'ai mis sur le serveurs

  file = dis.readUTF();
                 file = file.substring(file.indexOf('\\')+1,file.length());
                 File directorio = new File("c:\\dossier\\"+file+"\\");
                 directorio.mkdir(); 
              

merci.
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 10:37
le probléme que j'ai c'est que je veux créer un serveur capable a la fois de recevoir les fichier et créer des dossier.

les nom des dossier c moi qui doit les lui envoyé.

merci.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 10:48
Oui mais tu créés le répertoire systématiquement même quand ce n'est pas ce qu'on demande au serveur, ce qu'il faudrait c'est gérer le protocole.

Exemple :

ObjectInputStream in = new ObjectInputStream(connection.getInputStream());
int mode = in.readInt();
String nom = (String) in.readObject(); // nom de fichier ou répertoire

switch (mode)
{
case 1: // envoi de fichier
    // ...
    break;
case 2: // réception de fichier
    // ...
    break;
case 3: // création de répertoire
    // ...
    break;
}
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 10:59
merci beaucoup KX je vais essayé .
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 12:18
Bonjour KX merci pour votre aide jai essayé je ne sais pas pourquoi ca ne veut pas marché je ne reçois pas le fichier que j'envoi . voici les codes

Code Client
     try
	      {
	         // IP = JOptionPane.showInputDialog(null,"Entrez Lip du pc distant","Cliente",JOptionPane.CANCEL_OPTION);
	          Socket via = new Socket(IP, 1234);
	          if(via.isConnected())
	          {
	            JOptionPane.showMessageDialog(null, "Connecté au Serveur: " + IP);
	        
	 
	            JFileChooser selector = new JFileChooser();
	            selector.setDialogTitle("Selecciona el archivo a enviar");
	            int resultado = selector.showOpenDialog(null);
	            if (resultado == JFileChooser.APPROVE_OPTION)
	            {
	                archivo = selector.getSelectedFile();
	                direccionArchivo = archivo.getPath().toString();
	                FileOutputStream fos = new FileOutputStream(direccionArchivo);
		            ObjectOutputStream oos = new ObjectOutputStream(fos);
		            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
	                oos.writeInt(1);
	            }
	            else{via.close();}
	            



Code Serveur

package EspaceMateriels;
import java.net.*;
import java.io.*;
import javax.swing.*;
 
class Servidor
{
	
	public String user = System.getProperty("user.name");
	public static String nom = System.getProperty("user.home");
     public static void main (String[] args)
     {
         ServerSocket server;
         Socket connection = null;
 
         DataOutputStream output;
         BufferedInputStream bis = null;
         BufferedOutputStream bos;
 
         byte[] receivedData;
        
         String file;
 
         try{
             server = new ServerSocket(1234);
             while ( true ) {
                 connection = server.accept();
 
                 
             //    bis = new BufferedInputStream(connection.getInputStream());
            //     DataInputStream dis = new DataInputStream(connection.getInputStream());
                 ObjectInputStream in = new ObjectInputStream(connection.getInputStream());
                 int mode = in.readInt();
                 String nom = (String) in.readObject(); // nom de fichier ou répertoire

                 switch (mode)
                 {
                 case 1:   
                	 receivedData = new byte[8192];
                	 file = in.readUTF();
                 file = file.substring(file.indexOf('\\')+1,file.length());
 
                 //aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
                 bos = new BufferedOutputStream(new FileOutputStream("C:\\llego.msi\\"+ file));
             int in2;
                 while ((in2 = in.read(receivedData)) != -1){
                     bos.write(receivedData,0,in2);
                 }
                 bos.close();
              
 

                     break;
                 case 2: 
                     break;
                 case 3: // création de répertoire
                     // ...
                     break;
                 }
                 //recibimos el nombre del fichero
             
 
                 //aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
              
             
                
           
            
 
             //    JOptionPane.showMessageDialog(null, "Fichier (" + file.toString() + ") Reçu");
             //// System.exit(0);
             }
         }catch (Exception e ) {
             JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
         }
     }
}


Merci infiniment pour ton aide.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 12:42
Il faut bien comprendre que les deux codes : client, et serveur doivent rigoureusement correspondre.
Dans ton code client tu envoies 1 mais c'est tout, alors qu'il faudrait également envoyer le nom du fichier (là je pense que file=in.readUTF et nom=(String) in.readObject() font la même chose, donc un seul des deux suffira) puis le contenu du fichier avec write(byte[])
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 16:08
Merci KX pour votre réponse j'ai essayé mais ça n'a pas marché :s voici ce que jai changé merci.

Au niveau du CLIENT

      JFileChooser selector = new JFileChooser();
	            selector.setDialogTitle("Selecciona el archivo a enviar");
	            int resultado = selector.showOpenDialog(null);
	            if (resultado == JFileChooser.APPROVE_OPTION)
	            {
	                archivo = selector.getSelectedFile();
	                direccionArchivo = archivo.getPath().toString();
	                FileOutputStream fos = new FileOutputStream(direccionArchivo);
	           
		            ObjectOutputStream oos = new ObjectOutputStream(fos);
		            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
		--->           DataOutputStream dos = new DataOutputStream(via.getOutputStream());
		--->            byteArray = new byte[8192];
		--->           dos.writeUTF(archivo.getName());
	                oos.writeInt(1);
	                while ((in = bis.read(byteArray)) != -1)
		            {
		                oos.write(byteArray,0,in);
		            }
	            }
	            else{via.close();}



Au nveau du serveur jai enlevé nom=(String) in.readObject() et laissé in.readUTF

merci KX pour vos réponses.
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 17:40
Bonjour KX jai réussi a créer un dossier quand le serveur reçois 1 et le fichier s'envoi.
mais le probléme c'est qu'il ne fonctionne qu'une seul fois comme si le serveur se bloque voici mon code merci.


Code Serveur


package EspaceMateriels;

import java.net.*;
import java.io.*;

import javax.swing.*;
 
class Ser
{
	
	public String user = System.getProperty("user.name");
	public static String nom = System.getProperty("user.home");
     public static void main (String[] args)
     {
         ServerSocket server;
         Socket connection = null;
 
         DataOutputStream output;
         BufferedInputStream bis;
         BufferedOutputStream bos;
 
         byte[] receivedData;
         int in;
         String file;
 
         try{
             server = new ServerSocket(1234);
             while ( true ) {
                 connection = server.accept();
 
                 receivedData = new byte[8192];
                 bis = new BufferedInputStream(connection.getInputStream());
                 DataInputStream dis = new DataInputStream(connection.getInputStream());
 
                 //recibimos el nombre del fichero
                 file = dis.readUTF();
                 file = file.substring(file.indexOf('\\')+1,file.length());
                 ObjectInputStream ois = new ObjectInputStream(connection.getInputStream());
                // ois.skip(Long.MAX_VALUE);
                 
                int confirmation =(Integer) ois.readObject();
                 //aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
                 bos = new BufferedOutputStream(new FileOutputStream("C:\\llego.msi\\"+ file));
                 
         

             if(confirmation==1)
             {
            	 File directorio = new File("c:\\ireg\\momo\\");
                 directorio.mkdirs(); 
            	// System.exit(0);
             }
                 while ((in = bis.read(receivedData)) != -1){
                     bos.write(receivedData,0,in);
                 }
                 bos.close();
                 dis.close();
                 ois.close();
 
                 JOptionPane.showMessageDialog(null, "Fichier (" + file.toString() + ") Reçu");
             // System.exit(0);
             }
         }catch (Exception e ) {
             JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
         }
     }
}
 



Code Client
  try
	      {
	         // IP = JOptionPane.showInputDialog(null,"Entrez Lip du pc distant","Cliente",JOptionPane.CANCEL_OPTION);
	          Socket via = new Socket(IP, 1234);
	          if(via.isConnected())
	          {
	            JOptionPane.showMessageDialog(null, "Connecté au Serveur: " + IP);
	        
	 
	            JFileChooser selector = new JFileChooser();
	            selector.setDialogTitle("Selecciona el archivo a enviar");
	            int resultado = selector.showOpenDialog(null);
	            if (resultado == JFileChooser.APPROVE_OPTION)
	            {
	                archivo = selector.getSelectedFile();
	                direccionArchivo = archivo.getPath().toString();
	            }
	            else{via.close();}
	            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
	            BufferedOutputStream bos = new BufferedOutputStream(via.getOutputStream());
	 
	            //Enviamos el nombre del archivo
	            DataOutputStream dos = new DataOutputStream(via.getOutputStream());
	            dos.writeUTF(archivo.getName());
	            
	            ObjectOutputStream oos = new ObjectOutputStream(via.getOutputStream());
	            oos.flush();
	            oos.writeObject(1);
	            byteArray = new byte[8192];
	            while ((in = bis.read(byteArray)) != -1)
	            {
	                bos.write(byteArray,0,in);
	            }
	   bis.close();
	           bos.close();
	 
	            /*JOptionPane.showMessageDialog(null, "Le Fichier  " + archivo.getName().toString() +
	                                                 " a bien été envoyé");*/
	            String oups=archivo.getName();
	            String nom=("/IREG/");
	            String gogle="//"+IP+nom+"\""+oups+"\"";
	             gogle1="//"+IP+nom+oups;
	            
	            jTextField6.setText(gogle);
	            jTextField5.setText(gogle1);
	           System.out.println(gogle);
	         // String gogle= "\\"+"\\"+IP+nom+oups+""\t;
	        }
	 
	      }catch (Exception e) {//JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);
	    	  
	      }
	   
	   }


je vous remercie beaucoup pour votre aide.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 17:47
Il ne faut pas fermer les flux sur la socket, ils doivent rester ouverts aussi longtemps que le programme tourne...
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 17:57
merci KX j'ai essayé mais ça marche pas
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 17:59
le dossier se créer une seul fois et je recoi un seul fichier aprés plus rien ne marche
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 18:03
Il faudrait voir le code complet pour pouvoir tester, mais il y a sérieusement la méthode de développement à revoir, parce que tu mets tout dans un code monolithique, sans distinguer le côté réseau de l'interface graphique, tout se mélange pour complexifier des opérations qui sont finalement assez simple lorsqu'elles sont prises séparément !
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 18:09
merci voici le code complet

Serveur




package EspaceMateriels;

import java.net.*;
import java.io.*;

import javax.swing.*;
 
class Ser
{
	
	public String user = System.getProperty("user.name");
	public static String nom = System.getProperty("user.home");
     public static void main (String[] args)
     {
         ServerSocket server;
         Socket connection = null;
 
         DataOutputStream output;
         BufferedInputStream bis;
         BufferedOutputStream bos;
 
         byte[] receivedData;
         int in;
         String file;
 
         try{
             server = new ServerSocket(1234);
             while ( true ) {
                 connection = server.accept();
 
                 receivedData = new byte[8192];
                 bis = new BufferedInputStream(connection.getInputStream());
                 DataInputStream dis = new DataInputStream(connection.getInputStream());
 
                 //recibimos el nombre del fichero
                 file = dis.readUTF();
                 file = file.substring(file.indexOf('\\')+1,file.length());
                 ObjectInputStream ois = new ObjectInputStream(connection.getInputStream());
                // ois.skip(Long.MAX_VALUE);
                 
                int confirmation =(Integer) ois.readObject();
                 //aqui se escribe el archivo en la ubicacion donde este el Servidor.jar
                 bos = new BufferedOutputStream(new FileOutputStream("C:\\llego.msi\\"+ file));
                 
         

             if(confirmation==1)
             {
            	 File directorio = new File("c:\\llego.msi\\momo\\"+ file);
                 directorio.mkdirs(); 
            	// System.exit(0);
             }
                 while ((in = bis.read(receivedData)) != -1){
                     bos.write(receivedData,0,in);
                 }
                 bos.close();
                dis.close();
             //    ois.close();
 
                 JOptionPane.showMessageDialog(null, "Fichier (" + file.toString() + ") Reçu");
             // System.exit(0);
             }
         }catch (Exception e ) {
             JOptionPane.showMessageDialog(null,e, "Errror",JOptionPane.ERROR_MESSAGE);
         }
     }
}
 



Client


public  void Cliente()
	{
	  
	      int in;
	      byte[] byteArray;
	      File archivo = null;
	      String direccionArchivo = null;
	      String IP = "127.0.0.1";
	 
	      try
	      {
	         // IP = JOptionPane.showInputDialog(null,"Entrez Lip du pc distant","Cliente",JOptionPane.CANCEL_OPTION);
	          Socket via = new Socket(IP, 1234);
	          if(via.isConnected())
	          {
	            JOptionPane.showMessageDialog(null, "Connecté au Serveur: " + IP);
	        
	 
	            JFileChooser selector = new JFileChooser();
	            selector.setDialogTitle("Selecciona el archivo a enviar");
	            int resultado = selector.showOpenDialog(null);
	            if (resultado == JFileChooser.APPROVE_OPTION)
	            {
	                archivo = selector.getSelectedFile();
	                direccionArchivo = archivo.getPath().toString();
	            }
	            else{via.close();}
	            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(direccionArchivo));
	            BufferedOutputStream bos = new BufferedOutputStream(via.getOutputStream());
	 
	            //Enviamos el nombre del archivo
	            DataOutputStream dos = new DataOutputStream(via.getOutputStream());
	            dos.writeUTF(archivo.getName());
	            
	            ObjectOutputStream oos = new ObjectOutputStream(via.getOutputStream());
	       //     oos.flush();
	            oos.writeObject(1);
	            byteArray = new byte[8192];
	            while ((in = bis.read(byteArray)) != -1)
	            {
	                bos.write(byteArray,0,in);
	            }
	 //  bis.close();
	  //         bos.close();
	 
	            /*JOptionPane.showMessageDialog(null, "Le Fichier  " + archivo.getName().toString() +
	                                                 " a bien été envoyé");*/
	            String oups=archivo.getName();
	            String nom=("/IREG/");
	            String gogle="//"+IP+nom+"\""+oups+"\"";
	             gogle1="//"+IP+nom+oups;
	            
	            jTextField6.setText(gogle);
	            jTextField5.setText(gogle1);
	           System.out.println(gogle);
	         // String gogle= "\\"+"\\"+IP+nom+oups+""\t;
	        }
	 
	      }catch (Exception e) {//JOptionPane.showMessageDialog(null,e,"Error",JOptionPane.ERROR_MESSAGE);
	    	  
	      }
	   
	   }





Merci KX pour ton aide
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 18:11
public void Cliente() ce n'est pas une classe, ce qu'il faut c'est une méthode main distincte...
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 18:15
parceque je l'ai dans une classe et je l'appel comme fonction
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 18:20
merci KX pour ton aide
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
10 mai 2012 à 19:40
Tu ne peux pas faire juste une méthode client, il faut apprendre à structurer ton code en classes, la découper en fonctionnalités et faire tout cela proprement, parce dès que tu arrives sur des trucs un peu plus compliqués comme ici, tu ne t'y retrouves pas !

C'est bien sûr incomplet, mais voici de quoi (re)commencer :

import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Serveur
{    
    private final ServerSocket srv;
    private final File root;
    
    public Serveur(File root, int port) throws IOException
    {
        srv = new ServerSocket(port);
        this.root = root;
    }
    
    public void close() throws IOException
    {
        srv.close();
    }
    
    public void service() throws IOException
    {
        Socket clt = srv.accept();

        ObjectOutputStream output = new ObjectOutputStream(clt.getOutputStream());
        ObjectInputStream input = new ObjectInputStream(clt.getInputStream());

        int mode = input.readInt();

        switch (mode)
        {
        case 1 : 
            envoiFichier(input,output); 
            break;
        case 2 :
            receptionFichier(input,output);
            break;
        case 3 : 
            creationDossier(input,output); 
            break;
        default : 
            envoiConfirmation(output,false,"Mode non reconnu.");
        }
        
        input.close();
        output.close();
    }

    public boolean envoiFichier(ObjectInputStream input, ObjectOutputStream output) throws IOException
    {
        //TODO
        envoiConfirmation(output,false,"Mode non implémenté.");
        return false;
    }
    
    public boolean receptionFichier(ObjectInputStream input, ObjectOutputStream output) throws IOException
    {
        // TODO
        envoiConfirmation(output,false,"Mode non implémenté.");
        return false;
    }
    
    public boolean creationDossier(ObjectInputStream input, ObjectOutputStream output) throws IOException
    {
        String dir = input.readUTF();
        
        String[] tab = dir.split("/\\\\");
        
        File parent = root;
        for (String child : tab)
            parent = new File(parent,child);

        try
        {
            boolean res = parent.mkdir();
            envoiConfirmation(output,res,parent.getAbsolutePath());
            return res;
        }
        catch (SecurityException e)
        {
            envoiConfirmation(output,false,e.toString());
            return false;
        }
    }
    
    public void envoiConfirmation(ObjectOutputStream output, boolean conf, String msg) throws IOException
    {
        output.writeBoolean(conf);
        output.writeUTF(msg);
        output.flush();
    }
    
    public static void main(String...args) throws IOException
    {
        Serveur s = new Serveur(new File("C:\\test\\"),1234);

        for (int i=1; i<=3; i++)
            s.service();
        
        s.close();
    }
}

import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Client
{
    public static final String user = System.getProperty("user.name");
    public static final String nom = System.getProperty("user.home");
    
    private final Socket clt;
    private final ObjectInputStream input; 
    private final ObjectOutputStream output; 
    
    public Client(InetAddress address, int port) throws IOException
    {
        clt = new Socket(address,port);
        output = new ObjectOutputStream(clt.getOutputStream());
        input = new ObjectInputStream(clt.getInputStream());
    }
    
    public void close() throws IOException
    {
        input.close();
        output.close();
        clt.close();
    }
    
    public boolean envoiFichier(File fichier) throws IOException
    {
        // TODO
        output.writeInt(1);
        output.flush();
        return receptionConfirmation();
    }
    
    public boolean receptionFichier(String nomFichier, File dst) throws IOException
    {
        // TODO
        output.writeInt(2);
        output.flush();
        return receptionConfirmation();
    }
    
    public boolean creationDossier(String nomDossier) throws IOException
    {
        output.writeInt(3);
        output.writeUTF(nomDossier);
        output.flush();
        return receptionConfirmation();
    }
    
    public boolean receptionConfirmation() throws IOException
    {
        boolean conf = input.readBoolean();
        String msg = input.readUTF();

        if (conf)
            System.out.println("OK : "+msg);
        else
            System.err.println("KO : "+msg);
        
        return conf;
    }
    
    public static void main(String...args) throws IOException
    {
        Client c1 = new Client(InetAddress.getLocalHost(),1234);
        c1.creationDossier("tata");
        c1.close();
        
        Client c2 = new Client(InetAddress.getLocalHost(),1234);
        c2.creationDossier("tata/toto");
        c2.close();
        
        Client c3 = new Client(InetAddress.getLocalHost(),1234);
        c3.creationDossier("plop/titi");
        c3.close();
    }
}
0
valour1234 Messages postés 67 Date d'inscription mardi 8 mai 2012 Statut Membre Dernière intervention 18 mai 2012
10 mai 2012 à 20:32
Merci beaucoup KX je vais essayé si ca va marché merci
0