udpClient.Receive liefert nicht alle Pakete

imag

Grünschnabel
Also ich habe da folgendes Problem:

Ich bin dabei eine Überwachungskamera per UDP zu steuern und auch abzufragen (die Bilder zu holen).

Die Steuerung klappt per udpClient.Send und udpClient.Receive hervorragend, nach jedem gesendeten Kommando erhalte ich eine Antwort, das alles ausgeführt wurde.

Nur das Runterladen des aktuellen Bildes bereitet Kopfschmerzen.
Das Protokoll der Kamera sieht dabei folgendermassen aus:

1. PC sendet Anforderung für Bild
2. Kamera sendet Transferbeginn
3. Kamera sendet JPEG Header
4.-n. Kamera sendet Blöcke mit JPEG Daten
n+1. PC sendet Empfangsok
n+2. Kamera sendet ok

Es klappt aber nur bis zum 6. Block.
Dann hängt udpClient.Receive und tut so, als wären keine Pakete mehr da.
Ethereal sagt aber, dass alle Pakete da sind.

Ich nehme an, es hängt an irgendeinem Eingangspuffer, der bis zum 6. Paket alles ausnimmt und den Rest ignoriert.

Weiss jemand Rat?

Hier noch mal kurz meine Blockempfangsschleife.

while (offs < size) //Solange noch Daten kommen
{
recvBytes = udpClient.Receive(ref RemoteIPEndPoint);
//Datenblock empfangen
toCopy = recvBytes[21]*256+recvBytes[20];
Console.WriteLine("Block size " + toCopy.ToString());
offs = (int)(recvBytes[17]*256+recvBytes[16]);
//aktuelle Blocknummer
size = (int)(recvBytes[19]*256+recvBytes[18]);
//Blockanzahl gesamt
fs.Write(recvBytes, 28, toCopy);
//Block speichern
Console.WriteLine("Got page " + offs.ToString() + " From " + size.ToString());
}
 
Zurück