Cocoa NSOutputStream が接続に送信する
-
24-09-2019 - |
質問
私は 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書き込みの使用方法が不明ですか?
お願いします!この問題を解決するのに役立つ少しでも大歓迎です。
必要に応じて、コードの残りの部分を記述します。
- チャック
解決
わかりましたので、10時間28ビュー無回答/コメントは、それのOK、私は非常に非常に友好のirssiコーダ(何のお尻をなめるが意図していない。)からいくつかの良いの助けを借りて、それを解決しているため。)
彼提案私ははstd ::しようとしたことを(改行+フラッシュ)それをendl'e、と私は単純に改行文字を追加してみました(\ nは、は0x0A)と、それは完全に働いた!