C# TcpClient - Erkennung Ende-stream?

Ich versuche, das interface für einen alten Netzwerk-Kamera auf meinem computer und ich bin stecken geblieben in einem sehr grundlegenden problem-Erkennung Ende-stream.

Ich bin mit TcpClient mit der Kamera kommunizieren und ich kann tatsächlich sehen, dass es die übertragung der Kommando-Daten, hier gibt es keine Probleme.

        List<int> incoming = new List<int>();            
        TcpClient clientSocket = new TcpClient();
        clientSocket.Connect(txtHost.Text, Int32.Parse(txtPort.Text));
        NetworkStream serverStream = clientSocket.GetStream();
        serverStream.Flush();

        byte[] command = System.Text.Encoding.ASCII.GetBytes("i640*480M");
        serverStream.Write(command, 0, command.Length);

Lesen zurück die Antwort, wo das problem beginnt, wenn. Anfänglich dachte ich, so etwas einfaches wie das folgende Stück code, der auch funktioniert hätte:

        while (serverStream.DataAvailable)
        {
            incoming.Add(serverStream.ReadByte());
        }

Aber es ging nicht, also musste ich eine weitere version dieser Zeit die Nutzung ReadByte(). Die Beschreibung besagt:

Liest ein byte aus dem stream und
Fortschritte der position innerhalb der
stream durch ein byte, oder gibt -1 zurück, wenn
am Ende des Streams.

so, ich dachte, ich könnte implementieren, die etwas entlang der Linien von:

        Boolean run = true;
        int rec;
        while (run)
        {
            rec = serverStream.ReadByte();

            if (rec == -1)
            {
                run = false;
                //b = (byte)'X';
            }
            else
            {
                incoming.Add(rec);
            }

        }

Nope, funktioniert immer noch nicht. Ich kann tatsächlich sehen die Daten kommen und nach einem bestimmten Punkt (das ist nicht immer der gleiche, sonst könnte ich habe einfach gelesen, dass viele bytes jedes mal) ich beginne immer 0 als Wert für den rest der Elemente, und es nicht stoppen, bis ich es manuell beendet die Ausführung. Hier ist, wie es aussieht:
C# TcpClient - Erkennung Ende-stream?

Also meine Frage ist, bin ich etwas fehlt grundlegendes hier? Wie kann ich erkennen, das Ende des Streams?

Vielen Dank,

H.

  • Du liest ein byte aus dem stream, ein byte nicht -1 sein.
  • Nur brainfarting hier, aber könnte sein, dass es kein Ende des Strom,, dass Sie einfach immer die übertragung von Daten und die 0 ' s sind sozusagen eine KeepAlive-signal oder sowas. Ein weiterer Gedanke könnte sein, dass die 0 ist das Ende stream. Vergleichen Sie es mit dem rest der Daten, die Sie erhalten, wenn Sie nur die nicht-null-Werte, dann können Sie davon ausgehen 0 ist die EOS-signal von der Kamera. Wenn Sie sehen, ein paar null-Werte, nur dann erkennen, wenn Sie 4 oder 8 Nullen hintereinander. Weiß nicht, ist dies nützlich, die ist, warum ich bin nur so ein Kommentar.
  • Laut der Dokumentation ReadByte() tatsächlich gibt ein int.
  • Ich habe nicht gedacht KeepAlive TBH, danke. Leider habe ich Gelegenheiten, wo bekomme ich einen Haufen von Nullen in den Daten so nicht sicher, ob ich diese Methode verwenden können, um zu erkennen, end of frame.
  • Naja, wie @The Evil Greebo schlägt vor, unter, Sie brauchen, um zu finden, einige Muster in dem Strom. Ich würde vorschlagen, Sie Lesen ein Stück. Vielleicht 1kb an Daten oder was auch immer passt die meisten Pakete, und dann machen Sie eine side-by-side-hex vergleichen, um zu sehen, was Häufig, vor allem am Ende, bevor alle Nullen beginnen.
  • Überprüfen Sie, ob die Länge vorangestellt, in der die Daten, die Sie erhalten. Bis Sie wissen, die Länge, die Sie können nicht wirklich sicher sein. Der server sendet die Daten in > 1 Transaktionen.

InformationsquelleAutor Hamza | 2011-06-29
Schreibe einen Kommentar