en passant le serveur en Java, y'a toujours le problème
voilà le code succint du serveur :
Code :
- ServerSocket serverSocket = null;
- try {
- serverSocket = new ServerSocket();
- serverSocket.setReuseAddress(true);
- serverSocket.bind(new InetSocketAddress(port));
- } catch (IOException e) {
- System.err.println("Could not listen on port: " + port);
- System.exit(1);
- }
- while (true) {
- Socket clientSocket = null;
- try {
- System.out.println("Listening..." );
- clientSocket = serverSocket.accept();
- PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
- BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
- //int nbChar = Integer.parseInt(in.readLine());
- System.out.println("Réception d'une requête" );
- String requete = in.readLine();
- System.out.println(">>> " + requete);
- /*
- Traitement de la requête
- */
- out.write(resultat + "\n" );
- out.flush();
- System.out.println("Déconnexion en cours..." );
- out.close();
- in.close();
- clientSocket.close();
- System.out.println("Déconnecté" );
- current = (current + 1) % nbMax;
- } catch (IOException e) {
- System.err.println("Accept failed." );
- System.exit(1);
- }
- }
|
et voilà le code du client
Code :
- Socket socket = new Socket();
- socket.setReuseAddress(true);
- socket.connect(new InetSocketAddress(dhost, dport));
- System.out.println("Connecté" );
- System.out.println("Récupération du tunnel de communication" );
- BufferedReader in = new BufferedReader(new InputStreamReader(routeur.getInputStream()));
- BufferedWriter out = new BufferedWriter(new OutputStreamWriter(routeur.getOutputStream()));
- System.out.println("Tunnel OK" );
- System.out.println("Envoi de la requête" );
- out.write(requete.length() + " " + requete + "\n" );
- out.flush();
- System.out.println("Réception de la réponse" );
- resultat = Integer.parseInt(in.readLine());
- System.out.println("Réponse OK" );
- System.out.println("Déconnexion..." );
- in.close();
- out.close();
- routeur.close();
- System.out.println("Déconnecté" );
|
voilà, c'est quasiment le code qu'on trouve sur le tutorial de SUN, ça marche nickel quand le client tourne sous windows, mais quand le client tourne sous Linux, ça marche pas... toutes les connexions passent en TIME_WAIT, et quand on atteinte le maximum du système, y'a crash du serveur...