私の C#.Net 初心者ステータスをご容赦ください。これが明らかで、ドキュメントから見逃した場合は、関連するページまたはサンプル コードへのリンクをいただければ幸いです。
Java アプリケーションからの TCP ソケット接続を受け入れるアプリケーションに取り組んでいます。(はい、その部分には Java が必要です。これは Sun SPOT デバイスであり、Java が唯一のオプションです。) Java アプリは定期的に新しいデータをソケットに書き込みます。私のアプリの仕事は、byte[] を取り込み、変換することです。それを文字列に変換し、データを処理 (UI の更新など) し、場合によっては同様の C#.NET アプリを実行している別のコンピューターにデータを転送します。
これまでに行ったことは次のとおりです。現在、アプリは起動時にスレッドをスピンアップし、ソケットを開きます。Java アプリはソケットに正常に接続できるため、機能しています。私は NetworkStream のbeginRead
メソッドと 、dataAvailable
、length
およびCanRead
プロパティを見ていましたが、データの 1 つのパケット (通常は約 512 バイト) をいつ読み取ったかを確認する方法が完全にはわかりませんが、異なる場合があります。
Java アプリがデータをストリームに書き込む場合、またはデータのバックログがある場合 (Java アプリはかなり速くデータを渡します)、一度に 1 つのデータ パケットのみを読み取っていることを確認するにはどうすればよいですか? Java アプリが書き込み時にデータを null で終了する場合、それは役に立ちますか? それは十分ですか?
最後に、ソケットは 1 つの接続しか受信しませんが、エラーが発生するか接続が終了するまで開いたままにしておく必要があります。この側面を処理する最も優雅な方法は何ですか? Sun SPOT ベース ステーションで実行されている Java アプリケーションの急速な発火 (ほぼリアルタイム) の側面のため、データ パケットごとに閉じて再度開くことは機能しないと思います。現在、基地局が終了すると、私のアプリは大声で痛みを伴う死に方をします。:)
読んでくれてありがとう、そしてあなたが提供できる助けをありがとう。