kagelos Δημοσ. 23 Σεπτεμβρίου 2010 Δημοσ. 23 Σεπτεμβρίου 2010 Hello παίδες, έχω φτιάξει ένα τελείως απλό console app που κατεβάζει κάποια αρχεία από FTP. Το κάνω με την κλάση FtpWebRequest. Μόλις ανακάλυψα το property ContentOffset σκέφτηκα ότι εύκολα θα μπορούσα να κατεβάζω το κάθε αρχείο σε parts (και φυσικά να κάνω resume αν κοπεί η σύνδεση). Οπότε δοκίμασα για ένα αρχείο να ξεκινήσω π.χ. 3 threads και το καθένα να κατεβάζει από ένα offset και μετά. Το πρόβλημα είναι πως πάντοτε κατεβάζουν τα 2 threads και μόλις ολοκληρωθούν αρχίζει το 3ο και κατεβάζει (όχι απαραίτητα με την σειρά 1-2-3). Σας παραθέτω τον κώδικα και επισυνάπτω και την κλάση. > [color="#2b91af"]Thread[/color][] partThreads = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]Thread[/color][FileParts]; FtpPartDownload[] parts = [color="#0000ff"][b]new[/b][/color] FtpPartDownload[FileParts]; .................initialize............... [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i = [color="#ff8000"]0[/color]; i < FileParts; i++) { partThreads[i] = [color="#0000ff"][b]new[/b][/color] [color="#2b91af"]Thread[/color]([color="#0000ff"][b]new[/b][/color] [color="#2b91af"]ThreadStart[/color](parts[i].Download)); partThreads[i].Start(); } [color="#0000ff"][b]for[/b][/color] ([color="#8000ff"]int[/color] i = [color="#ff8000"]0[/color]; i < FileParts; i++) { partThreads[i].Join(); } FtpClient.zip
Evgenios1 Δημοσ. 23 Σεπτεμβρίου 2010 Δημοσ. 23 Σεπτεμβρίου 2010 1) Βαλε κανα region στα property. 2) Ξερεις κανα ftp server; με κανα τεστοαρχειο;
kagelos Δημοσ. 23 Σεπτεμβρίου 2010 Μέλος Δημοσ. 23 Σεπτεμβρίου 2010 Εδώ : ftp://ftp.ntua.gr/ κάτι θα βρεις να παίξεις user : anonymous pass : [email protected] π.χ. FtpClient ftpc = new FtpClient("ftp://ftp.ntua.gr/ls-lR.Z", "c:\\a.Z", "anonymous", "[email protected]"); ftpc.Download(); ---------- Προσθήκη στις 21:08 ---------- Προηγούμενο μήνυμα στις 20:52 ---------- Update : Από ότι είδα κάποιο ρόλο παίζει αυτό το property : FtpWebRequest.ServicePoint.ConnectionLimit Το θέμα είναι ότι εγώ φτιάχνω ξεχωριστά request για κάθε part. Μάλλον θα πρέπει να το αλλάξω και να κάνω ένα με πολλά async calls. ---------- Προσθήκη στις 21:10 ---------- Προηγούμενο μήνυμα στις 21:08 ---------- Είδα και αυτό : http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/0d50c216-f606-44cf-9664-613348947d72 ίσως το RFC των FTP λέει να αφήνει μόνο 2;
Evgenios1 Δημοσ. 23 Σεπτεμβρίου 2010 Δημοσ. 23 Σεπτεμβρίου 2010 Εαν βαλεις names στα thread θα δεις οτι το τελευταιο thread σταματαει στο internal class FtpPartDownload @ response = (FtpWebResponse)ftp.GetResponse();
kagelos Δημοσ. 23 Σεπτεμβρίου 2010 Μέλος Δημοσ. 23 Σεπτεμβρίου 2010 Το βρήκα. ServicePointManager.DefaultConnectionLimit = FileParts; Εδώ βάζεις όσα connections θες. Άκου εκεί ξεκάρφωτο!
Evgenios1 Δημοσ. 23 Σεπτεμβρίου 2010 Δημοσ. 23 Σεπτεμβρίου 2010 Το βρήκα. ServicePointManager.DefaultConnectionLimit = FileParts; Εδώ βάζεις όσα connections θες. Άκου εκεί ξεκάρφωτο! Αυτο ειναι που περνας και τα http exceptions (101 και κατι αλλα κουλα); Μα καλα, χαθηκε να το βαλουν μεσα στα request ως ενα property; btw Γιατι τις μαρκαρεις internal;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.