問題タブ [nsstream]

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 投票する
1 に答える
934 参照

ios - NSOutputStreamを使用してソケット経由でサーバーに送信する場合、データ(JSON)を改行で区切ります

アプリがJSONをサーバーに送信し、JSONを送り返すTCPプロトコルを作成しています。各送信を改行で区切るようにしています。これはサーバー側では問題ありませんが、各NSOutputStream書き込みに改行を追加するにはどうすればよいですか?

ストリームは正しく設定されており、データの送信に使用しているコードは次のとおりです。

その最後に改行()を追加するにはどうすればよいですか\n、確かに方法はありますか?

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

ios - iOSと.NET間のソケットの問題?

サーバーとして.NETデスクトッププログラムを実行していて、iOSでクライアントプログラムのポートを実装しようとしていますが、NSSocketから奇妙な動作が発生しています。これがサーバーからの関連コードです。

XCode 4.2を使用してiOSSimulatorで次のコードを試し、iOS 5をターゲットにしています。シミュレーターをホストしているMacはサーバープログラムと同じネットワーク上にあり、以下と同じハードコードされたローカルIPを使用するJavaクライアントを実行できます。うまく接続します。Objective Cコードでは、データを受信して​​NSDataメンバープロパティに格納しています。ソケットが開かれると、ストリームコールバックを使用して、データの送信をいつ試行するかを通知します。

XCodeコンソールに、「Stream is open!」、「Stream has space!」、「操作を完了できませんでした。ファイル記述子が正しくありません」という例外が表示されます。の直後にサーバーコードにブレークポイントを設定しました_tcpServer.AcceptSocket()が、ヒットしません。ストリームが開いているようですが、ソケットが接続されていませんか?

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

iphone - iOS-サーバーからのバイナリデータの受信はデバッグモードでのみ機能します

前回の投稿について質問があります

しかし、最初はいくつかのコードを提供する必要があると思います。

作成したオブジェクトを処理する関数です

}

そして、ここで私はストリームからデータを受け取ります

}

シミュレーターで、またはiPhoneでアプリケーションをデバッグする場合はすべて問題なく動作しますが、デバイスで実行しようとすると、packetLengthの値が間違っているため、常にBAD_EXCESSが発生します。そのため、バイトを読みすぎてしまいます。バッファ。

さて、私の質問です。デバッグモードではすべての値が正しいのに、実行モードでは完全に混乱するのはどうしてですか。その問題を回避するために私ができること、または私が知っておくべきことはありますか?

あなたの助けは大歓迎です

これが私のBytesToInt関数ですが、受け取った値が正しければ、正常に機能すると思います。

}

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

stream - CMSampleBufferRef をビデオに変換する

(私の英語でごめんなさい)

NSOutputStreamを使用してCMSampleBufferRefをビデオに変換/エンコードする方法は?

ipad からローカル ネットワークにビデオをストリーミングする必要があります。AVFoundation フレームワークを使用してビデオを取得します。ここで、このビデオを適切な形式に変換して、NSOutputStream を使用して HTTP サーバーに送信する必要があります。

私が何か間違ったことをしているなら、教えてください

よろしく。

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

ios - NSStream - 逆引き DNS ルックアップ エラー

名前ではなく数値アドレスのみを持つwifiアクセスポイントにNSStreamを開く必要があります。NSStream がソケットを開くのに 30 ~ 40 秒かかります。実験では、Windows ボックスから AP への telnet 接続は瞬時に行われることがわかりましたが、Mac では同じ 30 ~ 40 秒で接続されます。telnet を調べていると、Mac では実装が少し異なり、デフォルトで名前の検索を試みることがわかりました。telnet のマニュアル ページを読んでいると、次のことがわかりました。

「telnet -N IP-address port」を使用すると、すぐに接続できました。これと同じ問題が NSStream 接続の遅延を引き起こしていると思われます。NSStream で「-N」フラグを設定するのと同等の方法はありますか?

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

ios - ストリームでの最適化のため、値は一時的に利用できません

最近、リリース ビルドを使用してアプリケーションのテストを開始しました (スキームを管理し、デバッグからリリースまで実行を設定します)。私が気付いたのは、ストリーム メソッド内で次のエラー ポップアップが表示されることがあり、エラーを見つける方法がわからないことです。これはデバッグ モードでは完全に機能しますが、リリース ビルドでは、SIGABRT メッセージ以外の通知を受け取りません。また、シミュレーターのクラッシュ ログをチェックして問題の原因を確認する方法も知りません。以下に、クラッシュのスタック トレースを添付しました。

クラッシュが発生する stream:handleevent の Case ステートメント:

processMessage メソッド:

どんなアドバイスでも大歓迎です。

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

objective-c - URL ObjectiveCNSScannerからの画像と拡張子の解析

アプリ用にサーバーから画像を取得するプログラムがありますが、キャッシュのために画像をiOSアプリに保存したいと思います。

URLはこれに似ています。

画像名(mypicture)と拡張子(.png)を2つの異なる文字列に変換して保存する方法が必要です。

NSscannerを使用してこれをどのように達成しますか?

ありがとう

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

ios - bytesWrittenですが、他のデバイスがNSStreamEventHasBytesAvailableイベントを受信することはありません

iPhoneとMacの間にBonjourネットワークを設定しました。

ユーザーは、Macに表示されるテーブルでiPhoneのネットサービスを選択すると、ストリームのペアが作成され、両側で開かれます。

iPhoneは、コード(整数)をMacに送信することから始めます。Macはそれを正常に受信します。

ユーザー入力と処理を一時停止した後、MacはiPhoneへのコードの送信を開始します。

ただし、iPhoneがNSStreamEventHasBytesAvailableイベントを取得することはありません。この時点の直前に再確認したところ、iPhoneのNSInputStreamのstreamStatusは2であり、これはNSStreamStatusOpenです。

何が間違っている可能性があるのか​​?


更新:Macが最初にiPhoneに整数を送信するテストを実行しました。繰り返しになりますが、Macの出力ストリームからbytesWritten of 1を取得しましたが、iPhoneはNSStreamEventHasBytesAvailableイベントを取得しませんでした。

したがって、iPhoneの入力ストリームに何か問題があるはずです。しかし、私は再確認しました:

  • iPhoneのself.streamInは、hファイルにNSInputStreamとして正しく入力されています
  • iPhoneは2つのNSStreamEventOpenCompletedイベントを受け取り、ストリーム引数のクラスを確認します。1つはKindOfClass:[NSOutputStreamクラス]で、もう1つはそうではありません。
  • iPhoneは、NSStreamEventEndEncountered、NSStreamEventErrorOccurred、またはNSStreamEventNoneを受信しません。
  • 上記のように、Macの出力ストリームへの書き込みに続いて、iPhoneの入力ストリームステータスは2、NSStreamStatusOpenです。

iPhoneの入力ストリームを作成するために使用されるコードは次のとおりです。Cスタイルのソケットコールバック関数で行われるため、CFタイプを使用します。


Update2:alastairのコメントに対応する情報:

ソケットオプション

保持、解放、およびcopyDescriptionコールバックはNULLに設定されます。optionFlagsはacceptCallbackに設定されています。

ソケットの作成

これがiPhoneとMacの両方でソケットをセットアップするために使用される方法であり、さまざまなチュートリアルと実験(うまくいった)から適応されたこのコードで実際に何が起こっているのかを理解するための私のコメントされた試みで完了します:

ランループスケジューリング

はい、4つのストリームすべてがrunloopでスケジュールされ、すべて上記の最初の更新で投稿したものと同等のコードを使用しています。

ランループブロッキング:

同期、複数のスレッド、NSLocksなどで特別なことは何もしていません。また、コンソールに何かを印刷するようにボタンアクションを設定すると、それは全体で機能します—runloopは正常に実行されているようです。


Update4、ストリームポート?

Noaのデバッグの提案は、ストリームのプロパティをさらに調べるというアイデアを私に与えました。

ストリームがポートにぶら下がっていると思っていましたが、驚くべきことに、nTest常にnullです。私のアプリではnullであり、問​​題を示しているように見えますが、動作するチュートリアルアプリでもnullです。ストリームが作成された後、そのポート割り当てにハングアップする必要がない場合、ポートプロパティの目的は何ですか?

たぶん、ポートプロパティに直接アクセスできませんか?ただしnTest、次の場合も常にnullです。

0 投票する
0 に答える
1982 参照

objective-c - NSOutputStream フラッシュ

Objective-C で NSOutputStream を使用して小さなパッケージを送信したいと考えています。

このユーザーと同じ問題があります: Cocoa NSOutputStream send to a connection

答えは、文字列の末尾に「\n」を追加するだけです。私はそうしようとしましたが、うまくいきません。

あなたの誰かが私の問題を見ていますか?エンコーディングが問題である可能性がありますか?

編集: NSNetservice-Object からこのメソッドを呼び出して、出力ストリームを取得します。

Edit2:問題は、大量のメッセージを非常に高速に送信すると、サーバーがメッセージを2つに区切られたものではなく、1つの文字列として受信することです

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

objective-c - 複数の接続を許可するように CFSocket を使用した単純なサーバー実装を修正する方法

2010 年冬から iTunes U でスタンフォード大学 CS193p コース (iOS プログラミング) のレクチャー #17 の bonjour/NSStream サンプル コードを学習しています。サンプル コードはこちらから入手できます。

簡単に言うと、サンプル コードはソケットを作成し、ポート 0 にバインドして空きポートを割り当てます。NSNetService次に、 (bonjour)を使用してそのポートでサービスを公開します。NSNetServiceBrowserアプリ起動時にanも起動します。利用可能なサービスは に配置されますUITableView。セルを選択すると、対応するサービスが解決され、NSOutputStreamが作成され、データを送信できます。

接続が既に存在する場合、接続は拒否されるため、これは単純な実装です。私の質問は、複数の接続を処理する適切な方法は何ですか? 複数のクライアントがサーバーに接続されると、サーバーはそれらをどのように区別しますか? つまり、特定のクライアントだけにデータを送信し、他のクライアントには送信しないようにするにはどうすればよいでしょうか。