問題タブ [nsoutputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5942 参照

iphone - NSStringをuint8_tバッファーに入れる

私はソケットを使って作業していて、単に文字列をソケットに書き込もうとしています。次の例(oStreamはNSOutputStream)のように、これを行う方法についていくつかの例を見つけました。これはすべて内にありNSStreamEventHasSpaceAvailableます。

それはうまくいきます。そこで、NSStringからバイトを取得してカスタマイズできるように変更してみました。

これはまったく機能していません。完全なジブリッシュをバッファ(おそらくバイト)に書き込み、「getBytesの引数5を渡すと、キャストなしでポインタから整数になる」というgetBytes行の警告が表示されます。

申し訳ありませんが、これまでに質問されたことがありますが、検索しても答えが見つかりませんでした。問題の修正は非常に簡単なはずです。ありがとう!

編集: うまくいくように見えるものを見つけましたが、それがこのようなものの適切なプログラミングであるかどうかはわかりません。以下の回答をご覧ください。この状況で使用するのは危険なコードですか?

0 投票する
1 に答える
762 参照

iphone - NSOutputStream ソケットで問題を引き起こすデバイス名のチルダ

アプリケーションの iPhone バージョンとデスクトップ バージョンの間のネットワークでは、iPhone はデスクトップで使用するデバイス名を送信します。問題は、一部のベータ テスターのデバイス名にチルダ (`) が含まれていることです。何らかの理由で、これがデバイス名に含まれていると、ソケットが実際の文字列データを送信できなくなります。

送信する前にデバイス名を単純にクリーンアップしようとしましたが、デバイス名のチルダ (iTunes に入力されたもの) が実行時にチルダとして認識されません。動作しないコードは次のとおりです。

チルダは検出されず、何も置換されません。またrangeOfString、チルダを検索することもありましたが、何も返されません。少なくとも iTunes に入力されている文字はチルダであると 100% 確信しています。

また、文字列の説明をコンソールに出力する場合、文字は としてエンコードされ\u00b4、変数の上にカーソルを置くとピリオドとして表示されます.

このキャラクターをつかんでそこから出す方法を知っている人はいますか? また、Objective C で文字列をより簡単にクリーンアップして、ソケット経由で安全に送信できるようにする方法はありませんか?

編集: NSString を NSOutputString に書き込むには、次のコード行を使用します。

編集#2:このコード行はチルダを置き換えるために機能しますが、心配すべき他の文字があると確信しています:

0 投票する
1 に答える
3463 参照

cocoa - CocoaNSOutputStreamが接続に送信します

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

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

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

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

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

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

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

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

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

  • チャック
0 投票する
2 に答える
1411 参照

iphone - NSOutputStreamへの64ビットint値の書き込み

ネットワークに接続しているモーターのセットに位置座標を通信するのに問題があります。文字列を問題なく送信し、モーターからテキストを受信することはできますが、int値を送信できないようです。

NSlogを使用して、送信している実際の値が正しいと判断しましたが、出力ストリームを介して送信する方法が間違っていると思われます。何か案は?

64ビットint値を送信するための私のコード:

0 投票する
1 に答える
1205 参照

iphone - iPhone での Web リクエストのトンネリング

Webリクエストをトンネリングできるかどうか、そしてもちろん何を使用/実装するかを知りたいです。

私はすでにNSInputStreamNSOutputStreamのサブクラスを作成して、カスタム プロキシ サーバー経由でデータを送受信します。これは、ソケット接続でうまく機能しています。

UIWebViewNSURLRequestのデリゲートを実装しようとしましたが、 UIWebViewから行われたすべての HTTP リクエストをキャプチャできませんでした。

前もって感謝します。

0 投票する
1 に答える
830 参照

python - TCP パケット データをマージする NSOutputStream またはツイスト リアクター

私は、Python Twisted バックエンドとやり取りする iPhone アプリケーション用のネットワーク コードに取り組んでいます。最近、私の NSOutputStream が送信時にペイロードを 2 倍にしている、またはツイストが受信時にペイロードを 2 倍にしているような問題に遭遇しました。

「アップル推奨」スタイルの TCP ソケット、EG 非ポーリングを使用しています。

プロセスは次のとおりです。
CLIENT
    - NSStreamEventHasSpaceAvailable: X バイトのデータのパケットを送信します
    - NSStreamEventHasSpaceAvailable: Y バイトのデータの別のパケットを送信します
SERVER
    - Twisted はサイズ (X + Y) バイトのパケットを受信します

outputStream のステータスが「NSStreamStatusWriting」の場合、明示的にデータを送信しないようにしています。また、NSStreamEventHasSpaceAvailable がスローされていない場合、クライアントからのデータの送信が許可されないようにします。

このペイロードの二重化/合併の原因について何か考えはありますか? Twisted のコードはかなり単純で、プロトコルで標準の dataReceived を使用しています。

iOS コードもかなり標準的です。

上記の iOS コードが連続して 2 回呼び出されると (たとえば、2 つのパケットを次々に送信する)、ツイスト コードはマージされたデータ サイズを報告します。

アドバイスや提案をお寄せいただきありがとうございます。

0 投票する
1 に答える
2277 参照

objective-c - NSOutputStream、NSStreamEventHasSpaceAvailableイベントが通過した後にデータを適切に出力する方法は?

サーバーに送信したいメッセージをキューに追加します。

イベントNSStreamEventHasSpaceAvailableを取得したら、キュー内の最初のメッセージを送信してから削除し、次のメッセージの準備ができるようにします。キューが空の場合は、フラグを設定して、ストリームの準備ができていてキューが空であるため、キューに追加せずに次のメッセージをすぐに送信できるようにします。

これは、イベントを取得した後のコードです。

ログインは正常に機能します。ログインが完了すると、プログラムは必要に応じてキューを使用してメッセージを送信し始めます。

ここに、キューの最後にデータを追加するコードがあります。

問題は、サーバーがキューを介して送信されるデータを認識しないことです。データはprintf呼び出しで正しく印刷されます。ログインは完全に正常に機能します。データがイベントメソッドの外部に送信されると毎回失敗するように見え、サーバーが破損したデータを取得したかのように動作するイベントメソッドにある場合は失敗することがあります。

これはどのように行われることになっていますか?

ありがとうございました。

0 投票する
1 に答える
431 参照

iphone - istreamとostreamのiphone機能

次のコードで istream と ostream の機能を教えてください

0 投票する
3 に答える
3369 参照

iphone - NSOutputStream でパケットをすぐに送信またはフラッシュする方法

外部アクセサリ フレームワークを使用して Bluetooth アクセサリに接続すると、遅延の問題が発生します。データを送信すると、コンソールに次のカスタム出力が表示されます。

これにより、即時パック バッファがペイロードである次の出力が得られます。

hasSpaceAvailableメソッドが false を返し、true を返すまでデータを強制的にバッファリングすることを意味する "No Space" が継続的に書き込まれていることに注意してください。

1) 私が知る必要があるのは、なぜ起こっているのかということです? BT ハードウェアからの Ack を待っていますか? もしそうなら、どうやってこのブロックを解除しますか?

2) すぐに送信し、基本的にバッファリングせずにリアルタイムでデータをストリーミングするにはどうすればよいですか?

3) このブロッキングを無効にする隠し API メソッドはありますか?

デバイスにデータを送信する際に遅延や遅延が発生することはあり得ないため、これは実際の問題です。ハードウェアが iPhone コマンドと同期するためには、データをすぐに送信する必要があります。助けてください。

0 投票する
1 に答える
335 参照

objective-c - -1バイトを与えるNSOutputStream?

私は得ています:Wrote -1 bytes