1

私はCocoaを初めて使用しますが、(FTPへの)接続を確立して実行することができ、NSInputStream iStreamのイベントハンドラーを設定して、すべての応答を警告します(これも機能します)。

私が何とか取得したのは、単にhelloメッセージと60秒の接続タイムアウトで、制御接続を閉じています。

編集:私の質問は「閉じる->開くことなく、outputStreamをフラッシュする非終了の方法は何でしょうか?」だと思います。

stackoverflowを検索し、NSOutputStreamの書き込みの問題(NSOutputStreamの書き込みメッセージの使用方法など)とGoogleのヒットで多くの混乱を見つけた後、私は自分自身の質問をしようと思った。

OutputStreamでdeveloper.apple.comのドキュメントを読んでみましたが、NSOutputStream oStreamを介して「接続」にデータ(この場合は文字列)を送信することはほとんど不可能のようです。

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

上記は、使用可能なイベントにはならないようです。NSStreamEventHasSpaceAvailableで入力すると、新しい接続インスタンスを作成し続け、oStreamに空き領域がある場合は常にコマンドを送信し続けることで、ftpをスパムした場合に応答が返されることがあります。言い換えれば、「正しい」ものは何もないので、接続にコマンドを適切に送信する方法がまだわかりません。oStream(したがってftp)に書き込むたびに、開く->書き込む->閉じる必要があります。その後、応答(iStreamのhasBytesAvailableイベント)を期待できますか?編集:それはないようには見えません。

何らかの理由で、この問題に関する明確なチュートリアルを見つけるのは非常に難しいと思います。私と同じ立場にいる人は少なくないようです。oStream書き込みの使い方がわかりませんか?

お願いします!これをクリアするのに役立つ少しでも大歓迎です!

必要に応じて、残りのコードを書くことができます。

  • チャック
4

1 に答える 1

5

さて、10 時間 28 回のビューと回答/コメントはありませんが、それは問題ありません。非常にフレンドリーな irssi コーダーの助けを借りて解決したからです (尻舐めは意図していません ;))。

彼は私が std::endl'e (改行 + フラッシュ) を試みることを提案したので、単純に改行文字 (\n, 0x0A) を追加しようとしたところ、完全に機能しました!

于 2010-04-07T10:51:35.657 に答える