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 :
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 ?
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(); }
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 :
Pourquoi est-ce que les messages reçus après "LIST *" sont concaténés ?
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; }
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
Partager