Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide Recherche
511 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  21  22  23  24  25  26
Auteur Sujet :

[Java] Le topic-passage-obligé pour débutants !

n°1944752
koskoz
They see me trollin they hatin
Posté le 25-11-2009 à 21:13:44  profilanswer
 

Reprise du message précédent :
Il semblerait que j'ai un problème de lecture/ecriture simultané dans une arraylist.
 

Code :
  1. public void distribueCourrier() {
  2.     synchronized (boiteAuxLettres) {
  3.         for (Courrier<?> c : this.boiteAuxLettres) {
  4.             c.getDestinataire().recoitCourrier(c);
  5.         }
  6.         this.boiteAuxLettres.clear();
  7.     }        
  8. }


 

Code :
  1. if (this.courrierADistribuer())
  2.     this.distribueCourrier();
  3.  
  4. écriture dans l'arraylist


 
Il semblerait que ma liste soit en train d'être vidée en même temps que je la remplis.
Après quelques recherches j'ai trouvé la fonction synchronized mais ça n'a pas l'effet attendu et j'ai toujours une NullConcurrentException.


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
mood
Publicité
Posté le 25-11-2009 à 21:13:44  profilanswer
 

n°1944775
boulax
Inserer phrase hype en anglais
Posté le 25-11-2009 à 23:18:36  profilanswer
 

List list = Collections.synchronizedList(new ArrayList()) ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1944782
the real m​oins moins
Posté le 25-11-2009 à 23:49:33  profilanswer
 

bon, déjà, NullConcurrentException, ça existe pas. Ensuite, on va parier que recoitCourrier(c) fait un truc genre c.getBoiteAuxLettres() et va pipoter la liste en cours d'iteration.


---------------
I might have been talking about a sledgehammer earlier, but not in any smashing context
n°1944814
koskoz
They see me trollin they hatin
Posté le 26-11-2009 à 09:32:19  profilanswer
 

boulax a écrit :

List list = Collections.synchronizedList(new ArrayList()) ?

 

Je vais regarder ça :jap:

 
the real moins moins a écrit :

bon, déjà, NullConcurrentException, ça existe pas. Ensuite, on va parier que recoitCourrier(c) fait un truc genre c.getBoiteAuxLettres() et va pipoter la liste en cours d'iteration.

 

Voilà, c'est ça.
Pour l'exception je ne suis plus sûr, il faudrait que je relance le bouzin.


Message édité par koskoz le 26-11-2009 à 09:32:38

---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1946353
igarimasho
Posté le 01-12-2009 à 17:01:18  profilanswer
 

Quelle douleur java!!!
 
Quelqu'un a un bon tuto qui va droit au but pour tout ce qui concerne les certificats SSL et keystore? Je me tape constamment un "Invalid keystore format" et ça commence à me gonfler là.

n°1946432
koskoz
They see me trollin they hatin
Posté le 01-12-2009 à 20:17:15  profilanswer
 

J'ai tenté avec la synchronizedlist et j'ai toujours ma "java.util.ConcurrentModificationException".


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1946485
Masklinn
í dag viðrar vel til loftárása
Posté le 02-12-2009 à 07:51:20  profilanswer
 

koskoz a écrit :

J'ai tenté avec la synchronizedlist et j'ai toujours ma "java.util.ConcurrentModificationException".


Bah oui, t'es pas censé modifier une liste dans un thread pendant que tu l'itères dans un autre [:spamafote]


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1946580
koskoz
They see me trollin they hatin
Posté le 02-12-2009 à 12:50:22  profilanswer
 

Masklinn a écrit :


Bah oui, t'es pas censé modifier une liste dans un thread pendant que tu l'itères dans un autre [:spamafote]


 
Et il n'y a pas moyen de faire ça en mono thread ?
 
Genre :
 

Code :
  1. if (!maListe.empty())
  2.    maListe.clear();
  3.  
  4. maListe.add("toto" );


 
Basiquement c'est ce que je fais, et je pensais qu'il allait ajouter un élément à la liste une fois celle-ci vidée.


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1946591
Masklinn
í dag viðrar vel til loftárása
Posté le 02-12-2009 à 13:14:53  profilanswer
 

koskoz a écrit :

Et il n'y a pas moyen de faire ça en mono thread ?


Bah tu mets les deux opérations dans le même thread.
 
Ou alors tu apprends à utiliser les primitives de synchronization/parallélisme de java, parce que là tu m'as l'air de faire du PHP-coding (tu balances plein de bouts à l'écran et tu regardes ce qui tient), et quand tu fais du multithreading dans un langage impératif, c'est un très bon moyen de créer des race conditions & autres bugs bien subtils et bien violents.


---------------
Being constantly subjected to something makes you somewhat immune to it, like Brits and misery. -- Craspology
n°1946617
koskoz
They see me trollin they hatin
Posté le 02-12-2009 à 14:20:51  profilanswer
 

Masklinn a écrit :


Bah tu mets les deux opérations dans le même thread.
 
Ou alors tu apprends à utiliser les primitives de synchronization/parallélisme de java, parce que là tu m'as l'air de faire du PHP-coding (tu balances plein de bouts à l'écran et tu regardes ce qui tient), et quand tu fais du multithreading dans un langage impératif, c'est un très bon moyen de créer des race conditions & autres bugs bien subtils et bien violents.


 
Faudrait effectivement que je me renseigne sur les threads et les primitives de synchronisation, parce qu'on a pas du tout vu ça en cours.
Je ne sais même pas comment mettre deux opérations dans le même thread :/


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1946685
the real m​oins moins
Posté le 02-12-2009 à 16:24:04  profilanswer
 

Masklinn a écrit :


Bah oui, t'es pas censé modifier une liste dans un thread pendant que tu l'itères dans un autre [:spamafote]


c'est pas necessairement lié au threading; je lui ai dit plus ou ce qu'il se passait, il a dit "oui c'est ça" mais n'a visiblement pas compris/changé :D

Code :
  1. public static void main(String[] args) {
  2.         List<String> l = new ArrayList();
  3.         l.add("hello" );
  4.         l.add("world" );
  5.         l.add("what's" );
  6.         l.add("up?" );
  7.         for (String s : l) {
  8.             l.remove(3);
  9.         }
  10.     }


.. va peter de la meme maniere...


---------------
I might have been talking about a sledgehammer earlier, but not in any smashing context
n°1946707
koskoz
They see me trollin they hatin
Posté le 02-12-2009 à 17:32:46  profilanswer
 

the real moins moins a écrit :


c'est pas necessairement lié au threading; je lui ai dit plus ou ce qu'il se passait, il a dit "oui c'est ça" mais n'a visiblement pas compris/changé :D

Code :
  1. public static void main(String[] args) {
  2.         List<String> l = new ArrayList();
  3.         l.add("hello" );
  4.         l.add("world" );
  5.         l.add("what's" );
  6.         l.add("up?" );
  7.         for (String s : l) {
  8.             l.remove(3);
  9.         }
  10.     }


.. va peter de la meme maniere...


 
T'as juste dis qu'une des fonctions modifiait la list pendant qu'une autre la supprimé, ça je savais déjà :o


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1946728
the real m​oins moins
Posté le 02-12-2009 à 19:46:16  profilanswer
 

non.


---------------
I might have been talking about a sledgehammer earlier, but not in any smashing context
n°1946864
koskoz
They see me trollin they hatin
Posté le 03-12-2009 à 11:40:26  profilanswer
 

the real moins moins a écrit :

bon, déjà, NullConcurrentException, ça existe pas. Ensuite, on va parier que recoitCourrier(c) fait un truc genre c.getBoiteAuxLettres() et va pipoter la liste en cours d'iteration.


 
J'avoue, c'est super explicite.


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1950617
Antibug
AntiTerminatux
Posté le 15-12-2009 à 18:29:07  profilanswer
 

Salut les progeux,
On doit apprendre le JavaFX un peu tout seul pour un projet au bahu, les profs ne nous aidant pas des masses (projet tut).

 

C'est possible de créer un MC en Java "normal" et une vue en JavaFX et de lier les deux ?

 

Si oui, de quelle manière.
Merci.

Message cité 1 fois
Message édité par Antibug le 15-12-2009 à 18:29:20

---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1950619
couicsilve​r
Posté le 15-12-2009 à 19:00:34  profilanswer
 

Antibug a écrit :

Salut les progeux,
On doit apprendre le JavaFX un peu tout seul pour un projet au bahu, les profs ne nous aidant pas des masses (projet tut).
 
C'est possible de créer un MC en Java "normal" et une vue en JavaFX et de lier les deux ?
 
Si oui, de quelle manière.
Merci.


Je ne m'y connais pas trop en javafx, mais il me semble que oui. D'un côté t'as le langage de script propre à javafx, et de l'autre, toute la puissance du langage java. Quel intérêt sinon  :)

n°1963499
koskoz
They see me trollin they hatin
Posté le 05-02-2010 à 19:50:42  profilanswer
 

Je fais une pseudo appli de chat client serveur, en utilisant uniquement Socket et ServerSocket (pas de broadcasting ou de diagram).
 
J'ai mon serveur qui stocke chaque nouvelle connexion (une connexion = un socket) dans une liste, liste qui est ensuite passé au thread du serveur pour ensuite itérer dessus et ainsi communiquer avec tous les clients.
 
Le problème est du côté de ma class client. En effet, je n'arrive pas à recevoir les messages des autres clients, il n'y a que le serveur qui répond individuellement à chaque client.
J'avais tenté quelque chose qui fonctionnait à moitié, c'est à dire qu'à chaque fois qu'un client parlait il fallait que les autres fassent de même pour récupérer les messages entrant.
 
J'essaye de correctement coder la class client, mais pour l'instant impossible de voir le flux des autres.
 
Voici le code :
 

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.*;
  4.  
  5. public class MonServeurThread
  6. {    
  7.     private List<Socket> connectedClients = new ArrayList<Socket>();
  8.     ServerSocket serverSocket = null;
  9.     
  10.     MonServeurThread() throws IOException {
  11.         this.createServer();
  12.     }
  13.     
  14.     private void createServer() throws IOException {
  15.         boolean listening = true;
  16.         
  17.         // On ouvre une connexion sur le port 4444
  18.         try {
  19.             serverSocket = new ServerSocket(4444);
  20.         } catch (IOException e) {
  21.             System.out.println("Could not listen on port: 4444" );
  22.             System.exit(-1);
  23.         }
  24.     
  25.         while (listening) {
  26.             // On stocke chaque nouveau socket dans une liste pour pouvoir ensuite
  27.             // communiquer avec tout le monde
  28.             connectedClients.add(serverSocket.accept());
  29.             new Thread(new ClientConnectionHandler(
  30.                 connectedClients.get(connectedClients.size() - 1), this)).start();
  31.         }
  32.             
  33.         serverSocket.close();
  34.     }
  35.     
  36.     public List<Socket> getConnectedClients() {
  37.         return this.connectedClients;
  38.     }
  39.  
  40.     public static void main(String[] args) throws IOException {
  41.         new MonServeurThread();
  42.     }
  43. }


 

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.*;
  4.  
  5. public class ClientConnectionHandler implements Runnable
  6. {
  7.     private Socket socket = null;
  8.     List<Socket> connectedClient = new ArrayList<Socket>();
  9.     MonServeurThread mst = null;
  10.     
  11.     ClientConnectionHandler(Socket socket, MonServeurThread mst) {
  12.         this.socket = socket;
  13.         this.mst = mst;
  14.     }
  15.  
  16.     public void run() {    
  17.         PrintWriter out = null;
  18.         PrintWriter outAll = null; // outAll is to send a message to all the clients
  19.         BufferedReader in = null;
  20.         String inputLine = null;
  21.     
  22.         try {
  23.             out = new PrintWriter(socket.getOutputStream(), true);
  24.             in = new BufferedReader(new InputStreamReader(
  25.                                         socket.getInputStream()));
  26.                                         
  27.             String clientHostname =
  28.                         ((InetSocketAddress) socket.getRemoteSocketAddress())
  29.                             .getAddress().getHostName(); // get client hostname                            
  30.                                             
  31.             out.println(clientHostname + " is online." );    
  32.                                             
  33.             while (true) {
  34.                 inputLine = in.readLine();
  35.             
  36.                 if (inputLine.equalsIgnoreCase("bye" )) {
  37.                     System.out.println("Connexion avec le client fermée !" );
  38.                     break;
  39.                 }
  40.                 //else {                
  41.                     for (Socket s : mst.getConnectedClients()) {
  42.                         outAll = new PrintWriter(s.getOutputStream(), true);
  43.                         outAll.println(clientHostname +": " + inputLine);
  44.                     }
  45.                 //}
  46.             }    
  47.             socket.close();        
  48.             out.close();
  49.             in.close();
  50.                   
  51.         } catch (IOException e) {
  52.             e.printStackTrace();
  53.         }
  54.     }
  55. }


 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. public class Client
  5. {
  6.     public static void main(String[] args) throws IOException {
  7.         Socket socket = null;
  8.        PrintWriter out = null;
  9.        BufferedReader input;
  10.  
  11.        try {
  12.            socket = new Socket("koskoz-laptop", 4444);
  13.            out = new PrintWriter(socket.getOutputStream(), true);
  14.            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  15.        } catch (UnknownHostException e) {
  16.            System.err.println("Don't know about host: hostname." );
  17.            System.exit(1);
  18.        } catch (IOException e) {
  19.            System.err.println("Couldn't get I/O for the connection to: hostname." );
  20.            System.exit(1);
  21.        }
  22.        
  23.        input = new BufferedReader (new InputStreamReader (
  24.                                        new FileReader(socket.getInputStream())));
  25.             
  26.         new Thread (new BufferReaderHandler ()).start();
  27.  
  28.     }
  29. }


 

Code :
  1. import java.io.*;
  2.  
  3. public class BufferReaderHandler implements Runnable
  4. {
  5.     BufferedReader input;    
  6.     
  7.     BufferReaderHandler (BufferedReader input) {
  8.         this.input = input;
  9.     }
  10.     
  11.     public void run () {
  12.         while (true) {
  13.             try {
  14.                 String line = input.readLine();
  15.                 System.out.println("Server sent: " + line);
  16.             }
  17.             catch (IOException e) {
  18.                 e.printStackTrace();
  19.             }    
  20.         }
  21.     }
  22. }


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1963522
Antibug
AntiTerminatux
Posté le 05-02-2010 à 21:52:24  profilanswer
 

Laulz. La réponse m'intéresse, on en fait actuellement (des socket) et c'est tout à fait ce genre de choses avec des fichiers :jap:.


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966261
koskoz
They see me trollin they hatin
Posté le 15-02-2010 à 19:38:25  profilanswer
 

Wtf :  

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. public class MulticastServerThread implements Runnable
  5. {
  6.     protected DatagramSocket socket = null;
  7.     
  8.    public void run() {
  9.        String in = null;
  10.        try {
  11.            while (true) {
  12.                 byte[] buf = new byte[256];
  13.                 
  14.                 String toSend = "Salut !";
  15.                 buf = toSend.getBytes();
  16.  
  17.                 socket = new DatagramSocket(2678);
  18.                 InetAddress groupAdress = InetAddress.getByName("224.0.0.1" );
  19.                 DatagramPacket packet = new DatagramPacket(buf, buf.length,
  20.                                                             groupAdress, 7654);                                            
  21.                                                                 
  22.                 socket.send(packet);
  23.             }
  24.             //socket.close();
  25.         } catch (IOException e) {
  26.             e.printStackTrace();
  27.         }
  28.    }
  29. }


 
J'ai un beau :  
java.net.BindException: Address already in use
 
Sauf qu'évidemment j'ai testé n'importe quel port, et à chaque fois j'ai le même problème [:petrus75]


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1966267
Antibug
AntiTerminatux
Posté le 15-02-2010 à 19:47:33  profilanswer
 

Tiens tant qu'on y est...
Je fais des tests en local et dois faire des graphs de temps par lots de 10 tests pour 10Ko, 50Ko, 100Ko, 1Mo, 2Mo, 5Mo, 10Mo...70 essais vla l'utilité. Bref.

 

J'ai un soucis quand je transfère une image, tout n'est pas transféré ou alors le rendu n'est pas identique à la photo d'origine (et c'est peu dire).
La prof n'a aucune idée d'où ça vient... :/

 

Il faut lancer le récepteur en premier et lancer l'Emetteur par la suite.
Si quelqu'un a une idée...

 

Merci !

 
Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4.  
  5. public class Recepteur {    //le serveur reçoit
  6.     final static int NUMPORT = 2000;
  7.     /**
  8.      * Methode statique d'envoi
  9.      * @param nomfichier chemin du fichier
  10.      * @param port, port de transfert
  11.      */
  12.     public static void recevoir(String nomfichier,int port) throws Exception {
  13.         //duree d'attente du sleep
  14.         final int DUREEATTENTE = 1;
  15.         
  16.         //Le recepteur doit creer un ServerSocket et attendre une demande de connexion par l'emetteur
  17.         ServerSocket server = new ServerSocket(port);
  18.         Socket socket = server.accept();
  19.         
  20.         //Pour emettre et recevoir des donnees d'un Socket, il faut utiliser les flux
  21.         //entrant et sortant des Socket (methodes getInputStream() et getOutputStream()).
  22.         InputStream istrsocket = socket.getInputStream();
  23.         FileOutputStream fos = new FileOutputStream(nomfichier);
  24.         byte[] buf;
  25.         //Une fois que le recepteur a recu la demande de connexion (passage de methode accept())
  26.         //et a recupere le Socket lui permettant de communiquer avec l'emetteur, il faut attendre
  27.         //que les premieres donnees soient arrivees (utilisation de la methode avaible)
  28.         int taille = istrsocket.available();
  29.         //boucle attendant que quelque chose soit dispo
  30.         while(taille == 0){
  31.             taille = istrsocket.available();
  32.             Thread.sleep(DUREEATTENTE);
  33.         }
  34.         
  35.         while(taille != 0){
  36.             Thread.sleep(DUREEATTENTE);
  37.             buf = new byte[taille];
  38.             if(istrsocket.read(buf) != -1){
  39.                 fos.write(buf);
  40.             }
  41.             taille = istrsocket.available();
  42.         }
  43.         fos.close();
  44.         istrsocket.close();
  45.         socket.close();//fermeture des ports et fichiers
  46.     }
  47.     
  48.     /**
  49.      *
  50.      * @param args[0] nom du fichier
  51.      * @param args[1] numero du port
  52.      */
  53.     public static void main(String args[]){
  54.         try {
  55.             long tps = System.nanoTime();
  56.             recevoir("./ImageTransferee.jpg",NUMPORT);
  57.             //recevoir(args[0],Integer.valueOf(args[1]));
  58.             //System.out.println("Temps de reception : "+(System.nanoTime() - tps)+" nano secondes" );
  59.         } catch (Exception e) {
  60.             e.printStackTrace();
  61.         }
  62.     }
  63. }
 
Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4.  
  5. public class Emetteur {    //le client envoie, le serveur recoit
  6.     
  7.     /**
  8.      * @param pathname nom du fichier
  9.      * @param port numero du port a utiliser
  10.      * @param ip, String sur laquelle on envoie les fichiers
  11.      */
  12.     public static void envoit(String pathname,int port,String ip) throws Exception{
  13.         final int TAILLEPAQUET = 65000;    //taille maximale du paquet pour le tableau de bytes
  14.         
  15.         Socket socket = new Socket(InetAddress.getByName(ip),port);
  16.         FileInputStream file = new FileInputStream(pathname);
  17.         
  18.         byte[] tbyte = new byte[TAILLEPAQUET];
  19.         OutputStream out = socket.getOutputStream();
  20.         
  21.         int nombre = file.read(tbyte);
  22.         out.write(tbyte);
  23.         
  24.         while(nombre > 0){    //boucle pour gerer les gros fichiers
  25.             nombre = file.read(tbyte);
  26.             out.write(tbyte);
  27.         }
  28.         
  29.         file.close();
  30.         out.close();
  31.         socket.close();
  32.     }
  33.     
  34.     public static void main(String args[]){
  35.         try {
  36.                 int tps = (int) System.nanoTime();
  37.                 envoit("./Photo2Mo.jpg", 2000, "localhost" );
  38.                 //System.out.println("Temps de transmission : "+(System.nanoTime() - tps)+" nano secondes" );
  39.                 System.out.println(System.nanoTime() - tps);
  40.  
  41.  
  42.         } catch (Exception e) {
  43.             e.printStackTrace();
  44.         }
  45.     }
  46. }

Message cité 1 fois
Message édité par Antibug le 15-02-2010 à 19:47:59

---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966268
Antibug
AntiTerminatux
Posté le 15-02-2010 à 19:50:27  profilanswer
 

koskoz a écrit :

Wtf :  

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. public class MulticastServerThread implements Runnable
  5. {
  6.     protected DatagramSocket socket = null;
  7.     
  8.    public void run() {
  9.        String in = null;
  10.        try {
  11.            while (true) {
  12.                 byte[] buf = new byte[256];
  13.                 
  14.                 String toSend = "Salut !";
  15.                 buf = toSend.getBytes();
  16.  
  17.                 socket = new DatagramSocket(2678);
  18.                 InetAddress groupAdress = InetAddress.getByName("224.0.0.1" );
  19.                 DatagramPacket packet = new DatagramPacket(buf, buf.length,
  20.                                                             groupAdress, 7654);                                            
  21.                                                                 
  22.                 socket.send(packet);
  23.             }
  24.             //socket.close();
  25.         } catch (IOException e) {
  26.             e.printStackTrace();
  27.         }
  28.    }
  29. }


 
J'ai un beau :  
java.net.BindException: Address already in use
 
Sauf qu'évidemment j'ai testé n'importe quel port, et à chaque fois j'ai le même problème [:petrus75]


Faut close ton socket !


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966283
koskoz
They see me trollin they hatin
Posté le 15-02-2010 à 20:12:04  profilanswer
 

Antibug a écrit :


Faut close ton socket !


 
 [:prozac]


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1966294
boulax
Inserer phrase hype en anglais
Posté le 15-02-2010 à 20:29:23  profilanswer
 

koskoz a écrit :

Wtf :  

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. public class MulticastServerThread implements Runnable
  5. {
  6.     protected DatagramSocket socket = null;
  7.     
  8.    public void run() {
  9.        String in = null;
  10.        try {
  11.            while (true) {
  12.                 byte[] buf = new byte[256];
  13.                 
  14.                 String toSend = "Salut !";
  15.                 buf = toSend.getBytes();
  16.  
  17.                 socket = new DatagramSocket(2678);
  18.                 InetAddress groupAdress = InetAddress.getByName("224.0.0.1" );
  19.                 DatagramPacket packet = new DatagramPacket(buf, buf.length,
  20.                                                             groupAdress, 7654);                                            
  21.                                                                 
  22.                 socket.send(packet);
  23.             }
  24.             //socket.close();
  25.         } catch (IOException e) {
  26.             e.printStackTrace();
  27.         }
  28.    }
  29. }


 
J'ai un beau :  
java.net.BindException: Address already in use
 
Sauf qu'évidemment j'ai testé n'importe quel port, et à chaque fois j'ai le même problème [:petrus75]


Firewall sur la destination ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1966298
koskoz
They see me trollin they hatin
Posté le 15-02-2010 à 20:38:18  profilanswer
 

boulax a écrit :


Firewall sur la destination ?


 
C'était en local que je testais, et comme antibug me l'a fait remarqué, je n'ai pas fermé le socket.


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1966554
Antibug
AntiTerminatux
Posté le 16-02-2010 à 16:46:18  profilanswer
 

Antibug a écrit :

Tiens tant qu'on y est...
Je fais des tests en local et dois faire des graphs de temps par lots de 10 tests pour 10Ko, 50Ko, 100Ko, 1Mo, 2Mo, 5Mo, 10Mo...70 essais vla l'utilité. Bref.
 
J'ai un soucis quand je transfère une image, tout n'est pas transféré ou alors le rendu n'est pas identique à la photo d'origine (et c'est peu dire).
La prof n'a aucune idée d'où ça vient... :/
 
Il faut lancer le récepteur en premier et lancer l'Emetteur par la suite.
Si quelqu'un a une idée...
 
Merci !
 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4.  
  5. public class Recepteur {    //le serveur reçoit
  6.     final static int NUMPORT = 2000;
  7.     /**
  8.      * Methode statique d'envoi
  9.      * @param nomfichier chemin du fichier
  10.      * @param port, port de transfert
  11.      */
  12.     public static void recevoir(String nomfichier,int port) throws Exception {
  13.         //duree d'attente du sleep
  14.         final int DUREEATTENTE = 1;
  15.         
  16.         //Le recepteur doit creer un ServerSocket et attendre une demande de connexion par l'emetteur
  17.         ServerSocket server = new ServerSocket(port);
  18.         Socket socket = server.accept();
  19.         
  20.         //Pour emettre et recevoir des donnees d'un Socket, il faut utiliser les flux
  21.         //entrant et sortant des Socket (methodes getInputStream() et getOutputStream()).
  22.         InputStream istrsocket = socket.getInputStream();
  23.         FileOutputStream fos = new FileOutputStream(nomfichier);
  24.         byte[] buf;
  25.         //Une fois que le recepteur a recu la demande de connexion (passage de methode accept())
  26.         //et a recupere le Socket lui permettant de communiquer avec l'emetteur, il faut attendre
  27.         //que les premieres donnees soient arrivees (utilisation de la methode avaible)
  28.         int taille = istrsocket.available();
  29.         //boucle attendant que quelque chose soit dispo
  30.         while(taille == 0){
  31.             taille = istrsocket.available();
  32.             Thread.sleep(DUREEATTENTE);
  33.         }
  34.         
  35.         while(taille != 0){
  36.             Thread.sleep(DUREEATTENTE);
  37.             buf = new byte[taille];
  38.             if(istrsocket.read(buf) != -1){
  39.                 fos.write(buf);
  40.             }
  41.             taille = istrsocket.available();
  42.         }
  43.         fos.close();
  44.         istrsocket.close();
  45.         socket.close();//fermeture des ports et fichiers
  46.     }
  47.     
  48.     /**
  49.      *
  50.      * @param args[0] nom du fichier
  51.      * @param args[1] numero du port
  52.      */
  53.     public static void main(String args[]){
  54.         try {
  55.             long tps = System.nanoTime();
  56.             recevoir("./ImageTransferee.jpg",NUMPORT);
  57.             //recevoir(args[0],Integer.valueOf(args[1]));
  58.             //System.out.println("Temps de reception : "+(System.nanoTime() - tps)+" nano secondes" );
  59.         } catch (Exception e) {
  60.             e.printStackTrace();
  61.         }
  62.     }
  63. }


 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4.  
  5. public class Emetteur {    //le client envoie, le serveur recoit
  6.     
  7.     /**
  8.      * @param pathname nom du fichier
  9.      * @param port numero du port a utiliser
  10.      * @param ip, String sur laquelle on envoie les fichiers
  11.      */
  12.     public static void envoit(String pathname,int port,String ip) throws Exception{
  13.         final int TAILLEPAQUET = 65000;    //taille maximale du paquet pour le tableau de bytes
  14.         
  15.         Socket socket = new Socket(InetAddress.getByName(ip),port);
  16.         FileInputStream file = new FileInputStream(pathname);
  17.         
  18.         byte[] tbyte = new byte[TAILLEPAQUET];
  19.         OutputStream out = socket.getOutputStream();
  20.         
  21.         int nombre = file.read(tbyte);
  22.         out.write(tbyte);
  23.         
  24.         while(nombre > 0){    //boucle pour gerer les gros fichiers
  25.             nombre = file.read(tbyte);
  26.             out.write(tbyte);
  27.         }
  28.         
  29.         file.close();
  30.         out.close();
  31.         socket.close();
  32.     }
  33.     
  34.     public static void main(String args[]){
  35.         try {
  36.                 int tps = (int) System.nanoTime();
  37.                 envoit("./Photo2Mo.jpg", 2000, "localhost" );
  38.                 //System.out.println("Temps de transmission : "+(System.nanoTime() - tps)+" nano secondes" );
  39.                 System.out.println(System.nanoTime() - tps);
  40.  
  41.  
  42.         } catch (Exception e) {
  43.             e.printStackTrace();
  44.         }
  45.     }
  46. }



 :sweat:  


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966561
MEI
|DarthPingoo(tm)|
Posté le 16-02-2010 à 17:06:44  profilanswer
 

C'est qu'un piste, mais déjà, les buffer d'envoi/réception, tu te fait un tableau de byte de par ex 4096, et après quand tu lit/écrit tu indique la taille du buffer.
 
Sinon autre axe, classique, log ce qui sort et ce qui arrive buffer par buffer via la console. ;)


---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966567
Antibug
AntiTerminatux
Posté le 16-02-2010 à 17:30:55  profilanswer
 

65000 est la taille correcte admissible.
 
En fait là ça passe jusque 100Ko en gros.
A 1 Mo j'ai seulement une partie du fichier.
A 10Mo j'ai canal + en crypté...


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966573
MEI
|DarthPingoo(tm)|
Posté le 16-02-2010 à 17:51:51  profilanswer
 

Antibug a écrit :

65000 est la taille correcte admissible.
 
En fait là ça passe jusque 100Ko en gros.
A 1 Mo j'ai seulement une partie du fichier.
A 10Mo j'ai canal + en crypté...


 
Voilà déjà le code que j'aurai vu pour envoyer le fichier...
 

Code :
  1. public static void sendFile(String path_name, int port, String ip) throws Exception {
  2.             // Input stream, source is the file.
  3.             FileInputStream fis = new FileInputStream(path_name);
  4.             
  5.             // Output stream, destination is the socket.
  6.            Socket socket = new Socket(InetAddress.getByName(ip), port);
  7.             OutputStream os = socket.getOutputStream();
  8.             
  9.            // Preparing the transmition buffer.
  10.             final int BUFFER_SIZE = 1024; // 1kB is good, even for short MTU.
  11.            byte[] buffer = new byte[BUFFER_SIZE];
  12.            
  13.                        // Sending the file content...
  14.             while ((int bytesRead = fis.read(buffer)) != -1) {
  15.                 os.write(buffer, 0, bytesRead);
  16.             }
  17.             
  18.             // Closing input stream.
  19.            fis.close();
  20.             
  21.             // Closing output stream.
  22.            os.close();
  23.            socket.close();
  24.        }

Message cité 1 fois
Message édité par MEI le 16-02-2010 à 18:05:03

---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966575
Antibug
AntiTerminatux
Posté le 16-02-2010 à 17:53:07  profilanswer
 

Je vais regarder, merci.


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966579
souk
Tourist
Posté le 16-02-2010 à 18:13:46  profilanswer
 

MEI a écrit :


 
Voilà déjà le code que j'aurai vu pour envoyer le fichier...
 

Code :
  1. public static void sendFile(String path_name, int port, String ip) throws Exception {
  2.             // Input stream, source is the file.
  3.             FileInputStream fis = new FileInputStream(path_name);
  4.             
  5.             // Output stream, destination is the socket.
  6.            Socket socket = new Socket(InetAddress.getByName(ip), port);
  7.             OutputStream os = socket.getOutputStream();
  8.             
  9.            // Preparing the transmition buffer.
  10.             final int BUFFER_SIZE = 1024; // 1kB is good, even for short MTU.
  11.            byte[] buffer = new byte[BUFFER_SIZE];
  12.            
  13.                        // Sending the file content...
  14.             while ((int bytesRead = fis.read(buffer)) != -1) {
  15.                 os.write(buffer, 0, bytesRead);
  16.             }
  17.             
  18.             // Closing input stream.
  19.            fis.close();
  20.             
  21.             // Closing output stream.
  22.            os.close();
  23.            socket.close();
  24.        }



 
faudrait songer a fermer les streams dans un block finally peut etre [:dawao]

n°1966627
MEI
|DarthPingoo(tm)|
Posté le 16-02-2010 à 21:02:46  profilanswer
 

souk a écrit :


 
faudrait songer a fermer les streams dans un block finally peut etre [:dawao]


C'est pas de faire un try...catch...finally qui va faire que son fichier n'est pas corrompu... ;)


---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966631
souk
Tourist
Posté le 16-02-2010 à 21:15:52  profilanswer
 

MEI a écrit :


C'est pas de faire un try...catch...finally qui va faire que son fichier n'est pas corrompu... ;)


nan, mais quitte a filer du code dans un topic pour debutants, autant filer du propre [:dawao]

n°1966632
MEI
|DarthPingoo(tm)|
Posté le 16-02-2010 à 21:17:17  profilanswer
 

Antibug a écrit :

Je vais regarder, merci.


 
L'autre côté, m'enfin c'est pareil...
Bref... dommage j'ai pas de JDK sous la main pour tester.
 

Code :
  1. public static void receiveFile(String filename, int port) throws Exception {
  2.     // Creating server socket.
  3.     ServerSocket ss = new ServerSocket(port);
  4.     Socket socket = server.accept();
  5.  
  6.     // Input stream, source is the socket.
  7.     InputStream is = socket.getInputStream();
  8.  
  9.     // Output stream, destination is the file.
  10.     FileOutputStream fos = new FileOutputStream(filename);
  11.  
  12.     // Preparing the transmition buffer.
  13.     final int BUFFER_SIZE = 1024;
  14.            byte[] buffer = new byte[BUFFER_SIZE];
  15.  
  16.     while ((int bytesReceived = is.read(buffer)) != -1) {
  17.         fos.write(buf, 0, bytesReceived);
  18.     }
  19.  
  20.     // Closing output stream.
  21.     fos.close();
  22.  
  23.     // Closing input stream and socket.
  24.     is.close();
  25.     socket.close();
  26. }


---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966655
Antibug
AntiTerminatux
Posté le 16-02-2010 à 22:43:06  profilanswer
 

Je teste ça demain :jap:


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966751
Antibug
AntiTerminatux
Posté le 17-02-2010 à 10:31:50  profilanswer
 

Bon j'ai même pas eu à tester en fait. Je suis un digne abruti congénital en fait (bis).
Je passais au début une taille pour mon tableau de bytes de 65000 puis après j'avais la taille de avaible que je passais pour mon tableau de bytes [:prozac].
 
 
Voici le code refait et corrigé, merci à vous pour votre aide :)

Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. /**
  5. *
  6. * @author Antibug
  7. * Cette classe est a lancer en deuxieme
  8. * Le client envoie, le serveur recoit
  9. */
  10. public class Emetteur {
  11.     public final static int TAILLEPAQUET = 65000;    //taille maximale du paquet pour le tableau de bytes
  12.     
  13.     /**
  14.      * @param pathname nom du fichier
  15.      * @param port numero du port a utiliser
  16.      * @param ip, String sur laquelle on envoie les fichiers
  17.      */
  18.     public static void envoit(String pathname,int port,String ip) throws Exception{
  19.         
  20.         
  21.         Socket socket = new Socket(InetAddress.getByName(ip),port);
  22.         FileInputStream file = new FileInputStream(pathname);
  23.         
  24.         byte[] tbyte = new byte[TAILLEPAQUET];
  25.         OutputStream out = socket.getOutputStream();
  26.         
  27.         int nombre;
  28.         do{
  29.             nombre = file.read(tbyte);
  30.             out.write(tbyte);
  31.         } while(nombre > 0);
  32.  
  33.         out.flush();
  34.         file.close();
  35.         out.close();
  36.         socket.close();
  37.     }
  38.     
  39.     public static void main(String args[]){
  40.         try {
  41.             long tps = System.nanoTime();
  42.             envoit("./Photo10Mo.jpg", 2000, "localhost" );
  43.             //System.out.println("Temps de transmission : "+(System.nanoTime() - tps)+" nano secondes" );
  44.             System.out.println(System.nanoTime() - tps);
  45.  
  46.         } catch (Exception e) {
  47.             e.printStackTrace();
  48.         }
  49.     }
  50. }


Code :
  1. import java.io.*;
  2. import java.net.*;
  3.  
  4. /**
  5. *
  6. * @author Antibug
  7. * Cette classe est a lancer en premier
  8. *
  9. */
  10. public class Recepteur {    //le serveur reçoit
  11.     public final static int NUMPORT = 2000;
  12.     public final static int DUREEATTENTE = 50;//duree d'attente du sleep
  13.     
  14.     /**
  15.      * Methode statique d'envoi
  16.      * @param nomfichier chemin du fichier
  17.      * @param port, port de transfert
  18.      */
  19.     public static void recevoir(String nomfichier,int port) throws Exception {
  20.         //Le recepteur doit creer un ServerSocket et attendre une demande de connexion par l'emetteur
  21.         ServerSocket server = new ServerSocket(port);
  22.         Socket socket = server.accept();
  23.         
  24.         //Pour emettre et recevoir des donnees d'un Socket, il faut utiliser les flux
  25.         //entrant et sortant des Socket (methodes getInputStream() et getOutputStream()).
  26.         InputStream istrsocket = socket.getInputStream();
  27.         FileOutputStream fos = new FileOutputStream(new File(nomfichier));
  28.         byte[] buf;
  29.         
  30.         //Une fois que le recepteur a recu la demande de connexion (passage de methode accept())
  31.         //et a recupere le Socket lui permettant de communiquer avec l'emetteur, il faut attendre
  32.         //que les premieres donnees soient arrivees (utilisation de la methode avaible)
  33.         int taille;
  34.         
  35.         //boucle attendant que quelque chose soit dispo
  36.         while((taille = istrsocket.available()) == 0){
  37.             //Thread.sleep(DUREEATTENTE);
  38.         }
  39.         String res = "";        
  40.         while((taille = istrsocket.available()) != 0){
  41.             buf = new byte[Emetteur.TAILLEPAQUET];
  42.             
  43.             int tmp = istrsocket.read(buf);
  44.             if(tmp != -1 && tmp != 0){
  45.                 res+=tmp+"\n";
  46.                 fos.write(buf);
  47.                 Thread.sleep(DUREEATTENTE);
  48.             }
  49.         }
  50.         //fermeture des ports et fichiers
  51.         fos.close();
  52.         istrsocket.close();
  53.         socket.close();
  54.     }
  55.     
  56.     /**
  57.      *
  58.      * @param args[0] nom du fichier
  59.      * @param args[1] numero du port
  60.      */
  61.     public static void main(String args[]){
  62.         try {
  63.             long tps = System.nanoTime();
  64.             recevoir("TEST10M.jpg",NUMPORT);
  65.             //recevoir(args[0],Integer.valueOf(args[1]));
  66.             //System.out.println("Temps de reception : "+(System.nanoTime() - tps)+" nano secondes" );
  67.         } catch (Exception e) {
  68.             e.printStackTrace();
  69.         }
  70.     }
  71. }


---------------
Feed-Back | Moniteur officiel des essais statiques | Groupement Anti Terminatux | Lien leboncoin -> SPAM d'après Terminatux
n°1966944
koskoz
They see me trollin they hatin
Posté le 17-02-2010 à 16:30:35  profilanswer
 

J'ai une appli client/server.
Le serveur envoie un message à intervalles réguliers, puis se coupe ensuite.
 
J'aimerai que le client se coupe lui aussi lorsque le serveur est déconnecté.
Le tout à base de MulticastSocket et de DatagramSocket.


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1966945
MEI
|DarthPingoo(tm)|
Posté le 17-02-2010 à 16:34:00  profilanswer
 

koskoz a écrit :

J'ai une appli client/server.
Le serveur envoie un message à intervalles réguliers, puis se coupe ensuite.
 
J'aimerai que le client se coupe lui aussi lorsque le serveur est déconnecté.
Le tout à base de MulticastSocket et de DatagramSocket.


Y'a un petit problème conceptuel dans ta solution. Il faut bien qu'un des deux écoute tout le temps. Sinon comment être sur de ne pas avoir raté un message ?


---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966946
koskoz
They see me trollin they hatin
Posté le 17-02-2010 à 16:34:56  profilanswer
 

Bah si le socket est fermé c'est que le client n'a plus rien à recevoir :??:

Message cité 1 fois
Message édité par koskoz le 17-02-2010 à 16:35:15

---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1966953
MEI
|DarthPingoo(tm)|
Posté le 17-02-2010 à 17:02:47  profilanswer
 

koskoz a écrit :

Bah si le socket est fermé c'est que le client n'a plus rien à recevoir :??:


Ah, tu veux dire que lorsque le serveur a fini, le client se déconnecte tout seul ?
 
Dans ce cas deux possibilités :
- soit tu inclus dans ton protocole de communication un infos indiquant au client que c'est fini (le plus fiable)
- soit tu utilise socket.isConnected(). (à priori ça devrait le faire).


---------------
| Intel Xeon X3370 - 8GB DDR2-800 - ATI Radeon HD 5870 1GB | Intel Core i7-2630QM - 4GB DDR3-1333 - NVIDIA GeForce GT 550M 1GB |
n°1966957
koskoz
They see me trollin they hatin
Posté le 17-02-2010 à 17:08:20  profilanswer
 

MEI a écrit :


Ah, tu veux dire que lorsque le serveur a fini, le client se déconnecte tout seul ?
 
Dans ce cas deux possibilités :
- soit tu inclus dans ton protocole de communication un infos indiquant au client que c'est fini (le plus fiable)
- soit tu utilise socket.isConnected(). (à priori ça devrait le faire).


 
J'avais déjà essayé sans succès :
 

Code :
  1. import java.io.*;
  2. import java.net.*;
  3. import java.util.*;
  4.  
  5. public class MulticastClient
  6. {
  7.     public static void main(String[] args) throws IOException {
  8.     
  9.         MulticastSocket socket = new MulticastSocket(7654);
  10.         InetAddress address = InetAddress.getByName("224.0.0.1" );
  11.         socket.joinGroup(address);
  12.  
  13.         DatagramPacket packet;
  14.         boolean connected = true;
  15.         
  16.         while (connected) {
  17.             byte[] buf = new byte[256];
  18.             packet = new DatagramPacket(buf, buf.length);
  19.             socket.receive(packet);
  20.         
  21.             String received = new String(packet.getData());
  22.             System.out.println("Message reçu : " + received);
  23.             
  24.             if (!socket.isConnected())
  25.                 connected = false;
  26.         }
  27.         socket.leaveGroup(address);
  28.         socket.close();
  29.     }
  30. }


---------------
Blabla Revival, le forum qui envoie du caca | Blog | Twitter | Stats
n°1967035
Erickaby
Posté le 17-02-2010 à 23:39:13  profilanswer
 

S'il ya quelqu'un qui le code et l'UML de l'algo du chemin plus court pourra me le passer stp?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  21  22  23  24  25  26

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Java] Outil de gestion de "composants"; GraphEdit "like"[Java/xml] Caractères à la con ds un .xml généré en dom
Cryptage md5 & javaGénération d'images en Java (server side)
[Java] [Resolu] Erreur ODBC État de curseur non valide[JAVA] caractères accentué différents selon OS
[JAVA] Pb affichage caractèrecréer un répertoire en java
copier-coller en javapassage de c++ a php
Plus de sujets relatifs à : [Java] Le topic-passage-obligé pour débutants !


Hit-Parade
Copyright © 1997-2012 Hardware.fr SARL / Groupe LDLC / LesNumeriques.com / Version anglaise du site: BeHardware