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 : 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
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 : 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
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