Ich habe einen Server & Client-Modell. Der Client soll einen Screenshot machen und ihn dann an den Server senden. Das Problem, das ich habe, ist ein Teil des Screenshots fehlt. Was ich damit meine, ist wie 3/4 des Bildschirms ist schwarz, wenn in Paint oder einer anderen App geöffnet. Wenn ich den Screenshot-Befehl ein zweites Mal sende, wird die Datei überhaupt nicht geöffnet, sie ist beschädigt.Bild sendet nicht vollständig über TCP
Hier ist meine Client-Seite
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);
}
Wie Sie sehen können, ist es einen Screenshot nimmt, speichert das Bild in eine Bitmap-Datei, liest dann die Bytes in einen Puffer und sendet sie.
Hier ist meine Server-Seite
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");
}
}
Hier schicke ich den Befehl, den Client zu sagen, um einen Screenshot zu senden, dann den Bildschirm erhalten, und dann die besagte Screenshot in eine Bitmap-Datei zu schreiben.
Ich kann nicht herausfinden, was die oben genannten Probleme in diesem Code verursacht.
Wird das Protokoll, das Sie verwenden, dokumentiert? Wenn ja, wie heißt es, dass der Absender die Größe der Datei angibt? Und wie sagt es der Empfänger bestimmt, wenn es die ganze Datei hat? Wenn das Protokoll nicht dokumentiert ist, * stop * und dokumentieren Sie es, bevor Sie weiteren Code schreiben. Es gibt keine Möglichkeit zu wissen, ob Ihr Code korrekt ist oder ob der Absender oder Empfänger einen Fehler hat, ohne dass ein Protokolldokument definiert, was richtiges Verhalten ausmacht. –
Ich denke, das Problem ist nicht der Mangel an Dokumentation, ich denke, er versteht nicht, warum nicht alle Bytes geschrieben werden. –