Προς το περιεχόμενο

C# ftp client


kagelos

Προτεινόμενες αναρτήσεις

Δημοσ.

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

Δημοσ.

Εδώ :

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;

Δημοσ.
Το βρήκα.

 

ServicePointManager.DefaultConnectionLimit = FileParts;

 

Εδώ βάζεις όσα connections θες. Άκου εκεί ξεκάρφωτο!

 

Αυτο ειναι που περνας και τα http exceptions (101 και κατι αλλα κουλα); Μα καλα, χαθηκε να το βαλουν μεσα στα request ως ενα property; :mad:

 

btw Γιατι τις μαρκαρεις internal;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...