Bonjour
Je suis actuellement sur le développement d'un client/serveur, et j'aimerais pouvoir facilement transmettre, via des (SSL)Socket, aussi bien du texte pour mon protocole que des Objects pour le transfert de données.
Malheureusement je suis confronté à un problème qui ne génère pas d'exception mais bloque simplement mon programme.
Lors de la création d'une socket "client" suite à un accept(), je lance le constructeur de ma classe ServeurThread qui fait (entre autres) ceci :
et mon code se bloque alors sur la création de l'ObjectInputStream. Après une attente de quelques minutes pour être sûr je coupe mon client et j'ai donc logiquement un exception levée avec "java.net.SocketException: Connection reset".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 try { // affectation des flux d'E/S du client // pour les bytes m_toClientBytes = m_client.getOutputStream(); m_fromClientBytes = m_client.getInputStream(); // pour les Objects m_toClientObj = new ObjectOutputStream(m_toClientBytes); m_fromClientObj = new ObjectInputStream(m_fromClientBytes); // pour le texte m_toClientTxt = new PrintWriter(m_toClientBytes); m_fromClientTxt = new BufferedReader(new InputStreamReader( m_fromClientBytes)); // on "transforme" cette instance en thread puis on le lance m_monThread = new Thread(this); m_monThread.start(); } catch (IOException e) { m_others.fatal("Erreur d'affectation des flux d'E/S" + e); m_papa.delClient(); e.printStackTrace(); }
A savoir que si je commente les lignes ObjectInput/Output, le programme fonctionne correctement (pour l'envoi/réception de texte évidemment).
Ma question est donc, pourquoi ça bloque ?
Ensuite il est fort probable (enfin j'imagine) que l'affectation de plusieurs flux de différents types ne soit pas spécialement "propre", je suis donc totalement ouvert à toute proposition quand à la conception d'un tel serveur, celui-ci devant être capable d'envoyer/recevoir des String pour mon protocole et quelques informations, mais aussi de pouvoir envoyer/recevoir des Objets.
Partager