解決済み 問題は、読み取るように指示したときに一度にすべてのデータを取得したと想定していたため、READ SCREENSHOT メソッドから抜け出し、データ パックをパケット パーサーにダンプしていたため、コンソールに迷惑メールが送信されていました >. <
ありがとうジョン。
別の新しい問題があります。今回は、データ ストリームの何が問題なのかわかりません。現在、キャプチャされた画像ファイルを中央のネットワーク サーバーにストリーミングしようとしています。クライアント > サーバーをセットアップして、問題なく通信しています。一日中データをやり取りしていますが、スクリーンショット関数を呼び出して送信しようとすると、問題が発生します。
これに使用している現在のコードは次のとおりです。
注 DataHandler は、データを送受信するための単なるラッパーです。AddVar は、任意の変数を取り、ストリーム (new DataHandler(stream)) を介して送信するオーバーロードされたメソッドです。
DataHandler は TCP ストリームにリンクされています
ReadInt や ReadLong などは逆で、後でコードを簡単に保守できるようにするためのヘルパー関数です。
この時点で、サーバーは毎秒 ping をクライアントに送信します。クライアントは、別のパケットへの応答でビジーでない場合、その ping に応答するように設定されます (着信パケットは単一のスレッドで実行されます)。
サーバーはクライアントごとに同じルールに従います
データを SI.TakeScreenShotAndStream のストリームに書き込みます。このメソッドは、クライアント コンピューターのスクリーンショットを取得し、渡された任意のストリーム (この場合はメモリ ストリーム) にデータをストリーミングします。
エンドノート
(クライアント側)
try
{
DataHandler.AddVariable((byte)50);
memoryStream = new MemoryStream();
SI.TakeScreenShotAndStream(memoryStream, quality);
DataHandler.AddVariable(memoryStream.Length);
memoryStream.Position = 0;
memoryStream.CopyTo(clientStream);
clientStream.Flush();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Disconnect();
}
とサーバー側
if (!Directory.Exists(LoadedSettings.Directory + name)) Directory.CreateDirectory(LoadedSettings.Directory + name);
fileStream = File.Create(FullPath);
long length = DataHandler.ReadLong();
byte[] data = new byte[length];
clientStream.Read(data, 0, (int)length);
fileStream.Write(data, 0, (int)length);
fileStream.Flush();
fileStream.Close();
「スクリーンショットを撮って保存」機能は機能します。それを FileStream にストリーミングしてファイルに直接保存できます。これを行う方法については、メモリ ストリームのチュートリアルが役立ちます。
ある時点で、MemoryStream をバイト配列に変換しようとしましたが、それもうまくいきませんでした。
また、これは混乱するだけではありません。これらは両方とも、try/catch ステートメントと無効なパケット (1、2、および 50 atm 以外のもの) にカプセル化されており、無効な例外とパケット番号の両方がコンソールに記録されます。このコードを実行すると、コンソールに大量に吐き出されるため、シャットダウンするまでビープ音が鳴り続けます(プログラムのどこにもconsole.beepコードはありません)
任意の支援をいただければ幸いです:)