2010-04-06 3 views
1

Je suis nouveau à Cocoa, mais j'ai réussi à obtenir une connexion (à un FTP) opérationnel, et j'ai configuré un eventhandler pour le NSInputStream iStream pour alerter chaque réponse (qui fonctionne également).Cocoa NSOutputStream envoyer à une connexion

Ce que je parviens à obtenir est simplement le message hello et un délai de connexion de 60 secondes, fermant la connexion de contrôle.

EDIT: Je suppose que ma question est « sans closing-> ouvrir ce serait une façon non-terminale de la chasse outputStream

Après la recherche stackoverflow et trouver beaucoup de NSOutputStream écrire des problèmes (par exemple How to use NSOutputStream's write message?) et J'ai essayé de poser ma propre question:

J'ai essayé de lire le doc developer.apple.com sur OutputStream, mais il me semble quasiment impossible d'en envoyer données (dans ce cas, juste une chaîne) à la "connexion" via le flux de sortie NSOutputStream

- (IBAction) send_something: sender 
{ 
const char *send_command_char = [@"USER foo" UTF8String]; 
send_command_buffer = [NSMutableData dataWithBytes:send_command_char length:strlen(send_command_char) + 1]; 
uint8_t *readBytes = (uint8_t *)[send_command_buffer mutableBytes]; 
NSInteger byteIndex = 0; 
readBytes += byteIndex; 
int data_len = [send_command_buffer length]; 
unsigned int len = ((data_len - byteIndex >= 1024) ? 
        1024 : (data_len-byteIndex)); 
uint8_t buf[len]; 
(void)memcpy(buf, readBytes, len); 
len = [oStream write:(const uint8_t *)buf maxLength:len]; 
byteIndex += len; 
} 

ce qui précède ne semble pas entraîner d'événements utilisables. le taper sous NSStreamEventHasSpaceAvailable donne parfois une réponse si je spamme le ftp en continuant à créer de nouvelles instances de connexion et continue d'envoyer une commande quand oStream a de l'espace libre. En d'autres termes, rien "juste" et donc je ne sais toujours pas comment envoyer correctement une commande à la connexion. Devrais-je ouvrir -> write -> fermer chaque fois que je veux écrire sur oStream (et donc sur ftp) et puis-je attendre une réponse (événement hasBytesAvailable sur iStream)? EDIT: Ne le ressemble pas non.

Pour une raison quelconque, je trouve très difficile de trouver des tutoriels clairs sur ce sujet. On dirait qu'il y en a plus d'un dans la même position que moi: pas clair comment utiliser oStream write?

S'il vous plaît! Tout ce qui peut aider à éclaircir cela est grandement apprécié!

Si nécessaire, je peux écrire le reste du code.

  • Chuck

Répondre

4

Ok, donc 10 heures 28 vues et pas de réponses/commentaires, mais c'est OK, parce que je viens de résoudre avec une bonne aide d'un codeur irssi très très sympathique (pas léchage de cul destiné;)).

Il m'a proposé d'essayer std :: endl'e (newline + flush), et j'ai donc essayé d'ajouter simplement le caractère newline (\ n, 0x0A) et cela a fonctionné parfaitement!

+1

Pourquoi cela fonctionne-t-il? Que faire si j'envoie des données binaires? –

Questions connexes