Cocoa NSOutputStream an eine Verbindung senden

Ich bin neu in Cocoa, habe aber eine Verbindung (zu einem FTP) hergestellt und eine Ereignisbehandlungsroutine für den NSInputStream iStream eingerichtet, um jede Antwort zu warnen (was auch funktioniert).

Was ich bekomme, ist einfach die Hallo-Nachricht und eine Verbindungs-Zeitüberschreitung von 60 Sekunden, die die Steuerungsverbindung schließt.

EDIT: Ich denke, meine Frage ist "ohne Schließen-> Öffnen, was wäre eine nicht abschließende Möglichkeit, den outputStream zu leeren?

Nach dem Durchsuchen des Stackoverflows und dem Auffinden vieler NSOutputStream-Schreibprobleme (z. B.Wie verwende ich die Schreibnachricht von NSOutputStream?) und eine Menge Verwirrung in meinen Google-Hits, dachte ich, ich würde versuchen, meine eigene Frage zu stellen:

Ich habe versucht, das Dokument developer.apple.com in OutputStream zu lesen, aber es scheint mir fast unmöglich zu sein, einige Daten (in diesem Fall nur eine Zeichenfolge) über den NSOutputStream oStream an die "Verbindung" zu senden.

- (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;
}

das oben genannte scheint keine verwendbaren Ereignisse zur Folge zu haben. Wenn ich es unter NSStreamEventHasSpaceAvailable schreibe, kann es manchmal zu einer Antwort kommen, wenn ich das FTP als Spam versende, indem ich weiterhin neue Verbindungsinstanzen erstelle und weiterhin Befehle sende, wenn oStream freien Speicherplatz hat. Mit anderen Worten, es ist nichts "richtig" und daher ist mir immer noch unklar, wie ein Befehl ordnungsgemäß an die Verbindung gesendet werden soll. Soll ich jedes Mal öffnen -> schreiben -> schließen, wenn ich in oStream (und damit in den FTP) schreiben möchte, und kann ich dann eine Antwort erwarten (hasBytesAvailable-Ereignis auf iStream)? EDIT: Sieht nicht so aus, nein.

Aus irgendeinem Grund finde ich es sehr schwierig, eindeutige Tutorials zu diesem Thema zu finden. Scheint, als gäbe es mehr als ein paar in der gleichen Position wie ich: unklar, wie man oStream verwendet?

Bitte! Jedes bisschen, das helfen kann, das aufzuklären, wird sehr geschätzt!

Wenn nötig, kann ich den Rest des Codes schreiben.

Futte

Antworten auf die Frage(1)

Ihre Antwort auf die Frage