2010-04-05 7 views
0

Je suis nouveau à Cocoa, mais pas à la programmation. Récemment j'ai décidé que je voulais écrire un client FTP pour Mac, et donc je l'ai d'abord fait dans la langue dans laquelle je suis le plus à l'aise (sur Windows), puis je suis passé à Cocoa.Cocoa NSStream TCP connexion à FTP

Ma question est (apparemment) un peu controversée: Comment puis-je établir une connexion en lecture/écriture à (un serveur ftp)?

Ce que j'ai à ce jour (non travail évidemment):

NSInputStream *iStream; 
NSOutputStream *oStream; 
NSHost *host = [NSHost hostWithAddress:@"127.0.0.1"]; 
[NSStream getStreamsToHost:host port:3333 inputStream:&iStream outputStream:&oStream]; 
// ftp port: 3333 
[iStream retain]; 
[oStream retain]; 
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
      forMode:NSDefaultRunLoopMode]; 
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
      forMode:NSDefaultRunLoopMode]; 
[iStream setDelegate:self]; 
[oStream setDelegate:self]; // which is not implemented apparently 
[iStream open]; 
[oStream open]; 
// .... [iStream write: (const uint8_t *)buf maxLength:8]; 

Ce qui est en partie basé sur http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/Streams/Articles/NetworkStreams.html Maintenant, pourquoi ai-je choisi NSStream? Parce que cette question ne concerne que la connexion à un flux FTP, mon projet inclura également SSL et, dans la mesure où j'ai pu effectuer des recherches ici et sur google, NSStream est capable de "passer" à une connexion SSL.

Je n'ai pas été en mesure de voir la connexion en cours (ce que je suis généralement capable de faire), mais j'ai aussi entendu parler de devoir écrire dans le flux avant l'ouverture du flux?

Les pointeurs sont très appréciés, et désolé si ma question est ennuyeux - je suis nouveau à Cocoa :)

Répondre

2

Alors, quand je dit que j'étais nouveau cacao je voulais dire chaque mot. Il s'avère que le code ci-dessus fonctionnait après tout, je ne pouvais pas le voir car je m'attendais à ce que la connexion soit établie sur cette ligne: [NSStream getStreamsToHost: port hôte: 3333 inputStream: & iStream outputStream: & oStream]; mais il n'a pas été fait qu'après un NSRunAlert j'ai ajouté au fond pour le but de débogage. Je ne suis pas sûr si je suis plus embarressed que je suis confus hehe.

0

Vous devez implémenter la méthode delegEvent delegate et regarder ce qui se passe dans vos objets stream d'entrée et de sortie ... Jetez un oeil à la docs, elle est expliquée ici!

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent