Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1995 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Savoir si un ServerSocket attend sur un .accept() ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Savoir si un ServerSocket attend sur un .accept() ?

n°706202
Threep
I'm a mighty pirate!
Posté le 22-04-2004 à 17:04:17  profilanswer
 

Je programme actuellement un ptit serveur ftp en java, et pour gérer le mode passif, le serveur doit créer une socket en attente de connexion sur un port local, puis transmettre le numéro de ce port au client.
Alors seulement, le client connait le port sur lequel il doit se connecter.
 
Mon problème étant donc de n'écrire au client qu'une fois que le ServerSocket est bien en attente d'un accept().
 
Le accept() étant bloquant, je suis obligé de le foutre dans un thread à part, le problème étant de pouvoir savoir exactement à quel moment le serveur se met en attente.
J'ai pas trouvé de méthode serversocket.isWaitingForConnections() ou un truc ds le genre.
 
J'ai fait un truc de ce style là :


boolean serverStarted = false;
ServerSocket server = new ServerSocket(portDonnees);
t = new Thread() {
      public void run() {
           try {
                System.out.println("Thread démarré" );
                serverStarted = true;
                socket_donnees = server.accept();
                initSocketDonnees();
                server.close();
           } catch (IOException e) {
                e.printStackTrace();
           }
      }
};
t.start();
try {
    while (serverStarted == false) {
        Thread.sleep(10);
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}
Envoit au client le port sur lequel le serveur est démarré


Le truc c'est que forcément c'est assez crade, rien ne me dit que le thread va executer la ligne serverStarted = true, puis refiler la main à mon autre thread qui teste la valeur de serverStarted, avant d'executer la ligne du .accept().
Bien sur, en faisant un Thread.sleep relativement long, ça marche, m'enfin là aussi c'est pas non plus génial comme solution, puisque ça pourrait potentiellement ne pas marcher.
 
Y a un moyen efficace de tester si le ServerSocket est en attente de connexions ? Désolé si c'est tout con, mais j'ai pas trouvé dans l'API.


Message édité par Threep le 22-04-2004 à 17:04:41
mood
Publicité
Posté le 22-04-2004 à 17:04:17  profilanswer
 

n°706410
nraynaud
lol
Posté le 22-04-2004 à 20:28:34  profilanswer
 

tu fait un bind() explicite de ta socket, tu préviens que c'est fixé, avant de faire le accept() :
java/net/ServerSocket.html#bind(java.net.SocketAddress)
 
(le paramètre peut être nul, auquel cas le système choisi un port à ta place).


Message édité par nraynaud le 22-04-2004 à 20:28:58

---------------
trainoo.com, c'est fini
n°706575
veryfree
Posté le 22-04-2004 à 23:47:10  profilanswer
 

j'ai pas tt lu mais pourquoi pas fixé le port 21 pour l'ecoute ?
 
c'est pas standard ce que t'essaye de faire :/

n°706584
Threep
I'm a mighty pirate!
Posté le 23-04-2004 à 00:00:19  profilanswer
 

Nan je parle pas du ServerSocket principal qui lui bien sur écoute sur le port 21 (ou un autre).
 
En mode passif, pour les transferts de données, le serveur ouvre un autre port, et dit au client de se connecter à ce port pour receptionner/envoyer les données.
Le truc, c'est qu'avant d'envoyer le numéro de port au client, j'aimerai être sur que le serveur a bien ouvert ce port.

n°706601
veryfree
Posté le 23-04-2004 à 00:30:38  profilanswer
 

ok, dsl :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Savoir si un ServerSocket attend sur un .accept() ?

 

Sujets relatifs
Erreur sous Java Web Start[Java]Imprimer un document (doc, xml,...) via un bouton
[PHP] savoir si un tableau contient au moins un element ?[JAVA] Compraison de chaines, erreur de débutant je pense
[Java] un objet File a partir d'un Reader?[Java] jEditorPane : j'ai dumal là :/
lancement d'un programme java via un shellLancement d'un programme JAVA via un script
[Java] parser fichier CSV... JDBC ?[Résolu][Java]JavaHelp need Help :)
Plus de sujets relatifs à : [JAVA] Savoir si un ServerSocket attend sur un .accept() ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR