Socket et lecture du flux
	
	
		Bonjour,
Je suis actuellement occupé a me créer une classe FTP en Java. Non que les API existantes ne me plaisent pas, mais ca me fait mon petit tutorial perso par la même occasion:).
J'ai 2 soucis sur lesquels j'aimerai avoir l'avis d'expert svp :
1°) Voici la fonction Connect de ma classe :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | 	public boolean Connect() throws Exception{	 
 
		m_progress=true;
                //...
		socket.connect(m_address, 5000);
		Thread.sleep(waitTime); //wait for connecting
		//Ici je suis obligé de faire un sleep du thread de qq ms et ce à chaque envoi de données également ... 
		istream = socket.getInputStream();
		ostream = socket.getOutputStream();
 
		m_reply=ReadData();
 
		m_progress=false;	
 
		if(m_replyVal!=220){
			m_connected=false;
			CloseSocket();
			return false;
		}			
		else{
			m_connected=true;
			fireFTPSocketStateChanged(SocketState.Connected, SocketType.Normal);
			return true;
		}
	}
 
private void SendData(String data) throws Exception{
		ostream.write((data+"\r\n").getBytes());
		ostream.flush();
		if(debug) System.out.println("Sent : " + data);
		Thread.sleep(waitTime); //Egalement ici je dois faire un sleep pour pouvoir entammer la lecture de la réponse
		m_reply = ReadData();
	} | 
 Pouvez-vous me dire pourquoi à chaque envoi de données ou connect je suis obligé de faire un Thread.sleep avant de pouvoir lire la réponse ?
J'aime pas trop faire de sleep dans un Thread ca ralentit quand même l'exécution :(. Est-ce que je fais quelque chose de pas correct ?
2. Dans le cas suivant je recois des données concaténées sur mon flux réseau :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | public String[] GetFilelist(String Mask) throws Exception
    {
        m_progress = true;
        //....
 
        String[] list;
        String msg="";
 
        Socket DataSocket = CreateDataSocket();
 
        fireFTPEventMessage("LIST " + Mask,Way.Outgoing,-1);
        SendData("LIST " + Mask);
        // C'est ici que je recois ma réponse 150, et je recois dans la foulée la 226 que la liste est envoyée ... 
        if (!(m_replyVal== 150 || m_replyVal== 125))
        {
            Disconnect();
            throw new IOException("Error sending LIST Command - " + m_reply);
        }
 
        fireFTPEventMessage("Opening Data Connection ...", Way.System,-1);
 
        OutputStream out = DataSocket.getOutputStream();
        out.flush();
 
      	InputStream in = DataSocket.getInputStream();
 
 
        while(in.available()!=0){
			int bytes=in.read(m_buffer, 0, m_buffer.length);
			msg += new String(m_buffer,0,bytes);
			if(debug) System.out.println("Message Received : " + msg);
		}
 
        list = msg.split("\r\n");
 
        fireFTPEventMessage("Closing Data Connection",Way.System,-1);
        DataSocket.close();
        fireFTPSocketStateChanged(SocketState.Closed,SocketType.Normal);
 
        Thread.sleep(waitTime);
 
        //m_reply= ReadData();
 
        if (m_replyVal!= 226)
        {
            throw new IOException("Problem closing Data Connection : " + m_reply.substring(4));
        }
        m_progress = false;
        return list;
    } | 
 Pourquoi est-ce que les messages reçus après "LIST *" sont concaténés ?
J'exécute ce même code en c# (même exercice que j'avais fait à l'époque en c#) et la ca marche bien ...
Merci de votre aide,
Looney