私はサーバー&クライアントモデルを持っています。クライアントはスクリーンショットを作成し、それをサーバーに送信することになっています。私が持っている問題は、スクリーンショットの一部です。私がこれを意味するのは、ペイントや他のアプリで開かれたときに、画面の3/4が黒であるということです。もう一度screenshotコマンドを送信すると、ファイルがまったく開いていないため、破損しています。画像がTCP経由で完全に送信されない
は、ここにあなたが見ることができるように、それは、スクリーンショットを取るビットマップファイルに画像を保存し、その後、バッファにバイトを読み込み、それを送信し、私のクライアント側
if (plainText.Contains("screenshot"))
{
Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(bitmap);
graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size);
bitmap.Save("test.bmp");
writebuffer = File.ReadAllBytes("test.bmp");
stream.Write(writebuffer, 0, writebuffer.Length);
}
です。
がここにここに私のサーバー側
foreach (user c in clientList)
{
if (c.RemoteIPAddress == currentRow)
{
NetworkStream stream = c.clientTCP.GetStream();
writeBuffer = Encoding.ASCII.GetBytes("screenshot");
stream.Write(writeBuffer, 0, writeBuffer.Length);
byte[] readBuffer = new byte[0];
readBuffer = new byte[c.clientTCP.ReceiveBufferSize];
int data = stream.Read(readBuffer, 0, readBuffer.Length);
string x = new Random().Next().ToString();
FileStream f = new FileStream(new Random().Next() + ".bmp", FileMode.Create, FileAccess.Write);
f.Write(readBuffer, 0, data);
f.Close();
Process.Start(x + ".bmp");
}
}
で、私はその後、スクリーンショットを送信するためにクライアントに通知画面が表示され、その後、ビットマップファイルへとスクリーンショットを書き込むためのコマンドを送信します。
私はこのコードで前述の問題の原因を突き止めることはできません。
使用しているプロトコルは文書化されていますか?もしそうなら、送信者がファイルのサイズをどのように示していると言えますか?レシーバーがファイル全体をいつ決定するのかプロトコルが文書化されていない場合は、コードを書き込む前に* stop *して文書化してください。あなたのコードが正しいかどうかを知る方法や、正しい動作を構成するものを定義するためのプロトコル文書なしで、送信者または受信者に問題がないかどうかを判断する方法はありません。 –
私は問題がドキュメントの不足ではないと思う、私は彼がなぜバイトのすべてが書かれているのか理解していないと思う。 –