Socket java client serveur [Résolu/Fermé]

Signaler
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012
-
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012
-
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.

34 réponses

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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.
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

merci KX pour votre réponse mais comment pourais je faire svp
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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 !
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

merci KX je vais essayer de voir si ça va marché si c possible vous pouvez me donner un petit exemple
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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...
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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 !
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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 .
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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 !
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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;
}
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

merci beaucoup KX je vais essayé .
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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[])
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
Il ne faut pas fermer les flux sur la socket, ils doivent rester ouverts aussi longtemps que le programme tourne...
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

merci KX j'ai essayé mais ça marche pas
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

le dossier se créer une seul fois et je recoi un seul fichier aprés plus rien ne marche
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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 !
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

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
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
public void Cliente() ce n'est pas une classe, ce qu'il faut c'est une méthode main distincte...
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

parceque je l'ai dans une classe et je l'appel comme fonction
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

merci KX pour ton aide
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 858
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();
    }
}
Messages postés
67
Date d'inscription
mardi 8 mai 2012
Statut
Membre
Dernière intervention
18 mai 2012

Merci beaucoup KX je vais essayé si ca va marché merci