[java] problème de socket

problème de socket [java] - Java - Programmation

Marsh Posté le 01-10-2005 à 20:12:39    

Je suis en train de faire un petit serveur ftp inspiré de celui dans le bouquin sur la prog réseau en java (chez O'Reilly) et je rencontre un pb avec mon prog. C'est du au outToClient.Writebytes(...) dans la méthode processRequest(). Savez vous quel est le problème ??? :??:  
 
PS: les affichages bidons ne sont là qu'à titre de tests.
 
 
la sortie du prog:

$ java Server
---------Démarrage Server---------
 
re
test
pass
bordel
coincoincoin
Exception in thread "main" java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
        at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259)
        at FTPRequest.processRequest(FTPRequest.java:61)
        at FTPRequest.<init>(FTPRequest.java:41)
        at Server.<init>(Server.java:27)
        at Server.main(Server.java:58)


 
le prog:

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.lang.reflect.*;
  6. public class FTPRequest {
  7. protected Socket dataSocket = null;
  8. protected BufferedReader inFromClient;
  9. protected DataOutputStream outToClient;
  10. private Socket sock;
  11. /** Répertoire racine. */
  12.   protected File root;
  13.   /** Répertoire de travail. */
  14.   protected File wdir;
  15.   /** Nom du client. */
  16.   protected String user = null;
  17.   /** Vrai si le client est authentifié. */
  18.   protected boolean login = false;
  19. /** Connexion terminée. */
  20.   protected boolean closed = false;
  21. public FTPRequest(Socket sock) throws Exception {
  22.  this.sock=sock;
  23.  inFromClient = new BufferedReader(new InputStreamReader(this.sock.getInputStream()));
  24.  outToClient = new DataOutputStream(this.sock.getOutputStream());
  25.  outToClient.writeBytes("220 localhost FTP server ready."+'\n');
  26.                 this.processRequest();
  27. }
  28. private void processRequest() throws Exception {
  29.  String line = null;
  30.  while ((line = inFromClient.readLine()) != null)
  31.   {
  32.   String request;
  33.     String reste;
  34.     int index = line.indexOf(' ');
  35. System.out.println("coincoincoin" );
  36.     if (index!=-1) {
  37.       request = line.substring(0,index);
  38.       reste = line.substring(index+1);
  39.     } else {
  40.       request = line;
  41.       reste = "";
  42.     }
  43. outToClient.writeBytes("on test le tout et on recommence22"+'\n');
  44. System.out.println("coin" );
  45.     request = request.toUpperCase();
  46.     System.out.println("requete = "+request);
  47. System.out.println("reste = "+reste);
  48. outToClient.writeBytes("on test le tout et on recommence"+'\n');
  49. if(request =="USER" ){
  50.  System.out.println("on passe dans user" );
  51.  if(reste!="" )
  52.   processUSER(reste);
  53. }
  54.  else
  55.   outToClient.writeBytes("503 Utilisation USER [nom d'utilisateur]."+'\n');
  56. if(request =="PASS" )
  57.  if(reste!="" )
  58.   processPASS(reste);
  59.  else
  60.   outToClient.writeBytes("503 Utilisation PASS [mot de passe].\n" );
  61.      
  62. System.out.println("zut" );
  63.   }
  64.  sock.close();
  65.         }
  66. public void processUSER(String line) throws Exception {
  67.  if (!login) {
  68.          user = line;
  69.          outToClient.writeBytes("331 Vous devez donner votre mot de passe, "+ user + ".\n" );
  70.     
  71.       } else {
  72.          outToClient.writeBytes("530 Déjà logé.\n" );
  73.       }
  74. }
  75. public void processPASS (String param) throws IOException {
  76.     if (user==null || login) {
  77.       outToClient.writeBytes("503 Utilisez d'abord USER.\n" );
  78.       return;
  79.     }
  80.     // Vérification du mot de passe
  81.     login = checkPasswd(user,param);
  82.     if (login) {
  83.       outToClient.writeBytes("230 Utilisateur "+ user + " loggué.\r" );
  84.       return;
  85.     }
  86.     user = null;
  87.     outToClient.writeBytes("530 Login incorrect.\r" );
  88.  
  89. }
  90. boolean checkPasswd(String user,String passwd) {
  91.     return true;
  92.   }
  93. }


Message édité par nodus le 02-10-2005 à 15:07:48
Reply

Marsh Posté le 01-10-2005 à 20:12:39   

Reply

Marsh Posté le 02-10-2005 à 15:07:54    

Personne n'a d'idée ? :hello:

Reply

Marsh Posté le 03-10-2005 à 09:02:14    

fais un :

Code :
  1. outToClient.flush()


après chaque appel à la méthode writeXXXX.  
Et dis-nous si ça marche mieux ;-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed