none
Networkstream wird in der WPF falsch angezeigt RRS feed

  • Frage

  • Hallo,

    Ich hab mein Programm(ein Chat-Client) in die WPF importiert, aber wenn dieses nun den Networkstream als String in einer Textbox anzeigt,

    erscheinen nach dem Text 30 "Rechtecke". Ich selber kann mir das nicht erklären und habe auch keine Lösung gefunden.

    hier der Code:

    private void getMessage()
            {
                while (true)
                {
                    try
                    {
                        serverStream = clientSocket.GetStream();
                        int buffSize = 0;
                        byte[] inStream = new byte[10025];
                        buffSize = clientSocket.ReceiveBufferSize;
                        serverStream.Read(inStream, 0, buffSize);
                        string returndata = System.Text.Encoding.ASCII.GetString(inStream);
                        readData = "" + returndata;
                        msg();
                    }
                }
            }

            private void msg()
            {
                this.Dispatcher.Invoke(new Action<TextBox>(textBox => textBox.Text += Environment.NewLine + " >> " + readData),this.textBox1);
            }

    LG

    Tea Time

    Ps: k.a. wieso, aber man kann die "Rechtecke" nicht kopieren




    • Bearbeitet tea time Mittwoch, 18. Januar 2012 20:45
    Mittwoch, 18. Januar 2012 19:26

Antworten

  • Hallo Tea Time,

    Wenn Du das nächste Mal Codeschnippsel postest, die Du nicht selber geschrieben hast, füge bitte auch die Quelle hinzu (z.B. http://csharp.net-informations.com/communications/csharp-chat-server.htm), damit die Teilnehmer in diesem Forum die Möglichkeit haben, den ganzen Context des Codes zu sehen. Die Quelle erklärt in diesem Fall mit einem Schlag sowohl das byte[10025], als auch das fehlende Read, das verwendete Encoding usw.

    Gruß
    Marcel

    • Als Antwort markiert tea time Montag, 23. Januar 2012 15:48
    Donnerstag, 19. Januar 2012 10:10
    Moderator

Alle Antworten

  • Ähhh Was ?

    Also WPF = Windows Presentation Foundation , eine Technologie um Anwendungsoberflächen zu generieren in XAML.

    Was genau machst du ? Bitte poste uns Code , damit wir nachvollziehen können was du machst und gib uns bitte eine detailiertere Fehlerbeschreibung.

    Grüße

    Mittwoch, 18. Januar 2012 19:34
  • Hallo,

    Deine Empfangsroutine hatte schon Fehler, wenn die unverändert übernommen wurde.
    Wenn Du von einem Stream liest, so liefert Dir die Read-Methode die effektive Anzahl an gelesenen Bytes.
    Und die müsstest Du der Encoding.GetString schon mitteilen, ansonsten konvertiert die auch 0-Bytes in Zeichen,
    was je nach Schriftart hübsche Kästchen werden können.

    Das ist aber nicht das einzige Problem. Nur weil Du großzügig 10025 Bytes vorgeben hast,
    heißt das nicht, dass über einen Netzwerk-Stream alle  Bytes auf einmal übertragen werden.
    Es ist durchaus möglich (und bei voller Nutzung wahrscheinlich, dass daraus mehrere Päckchen
    gemacht werden und Du mehrmalig Read aufrufen musst, um alle Daten zu erhalten.
    Thomas Scheidegger hat das illustiert in:
    Socketverbindung wird unerwartet unterbrochen

    Vorerst zum letzten:
    Mit ASCII kannst Du nur wirklich nur Basis-Zeichen darstellen, schon deutsche Umlaute sind dort nicht mehr enthalten.
    Deswegen empfiehlt es sich Encoding.UTF8 zu verwenden.
    Dabei wiederum kann es passieren, dass ein Zeichen nicht in einem Paket übertragen wird,
    da Zeichen dort mehr als ein Byte umfassen können, siehe UTF-8.
    Und dort sollte deswegen ein Decoder verwendet werden, siehe  GetDecoder-Methode

    Gruß Elmar

    • Als Antwort markiert tea time Donnerstag, 19. Januar 2012 17:43
    • Tag als Antwort aufgehoben tea time Donnerstag, 19. Januar 2012 17:49
    Mittwoch, 18. Januar 2012 21:27
    Beantworter
  • Danke! Ich probiers gleich!
    Donnerstag, 19. Januar 2012 06:06
  • Hallo Tea Time,

    Wenn Du das nächste Mal Codeschnippsel postest, die Du nicht selber geschrieben hast, füge bitte auch die Quelle hinzu (z.B. http://csharp.net-informations.com/communications/csharp-chat-server.htm), damit die Teilnehmer in diesem Forum die Möglichkeit haben, den ganzen Context des Codes zu sehen. Die Quelle erklärt in diesem Fall mit einem Schlag sowohl das byte[10025], als auch das fehlende Read, das verwendete Encoding usw.

    Gruß
    Marcel

    • Als Antwort markiert tea time Montag, 23. Januar 2012 15:48
    Donnerstag, 19. Januar 2012 10:10
    Moderator
  • Mein Chat-client bassiert auf dem Programm, was du gefunden hast.

    Dieser Codeschnippsel ist allerdings das einzige Überbleibsel vom Original.

    LG

    Tea Time



    • Bearbeitet tea time Donnerstag, 19. Januar 2012 17:49
    Donnerstag, 19. Januar 2012 17:37
  • Die Quelle erklärt in diesem Fall mit einem Schlag sowohl das byte[10025], als auch das fehlende Read, das verwendete Encoding usw.
    Ah, jetzt hab ochs gefunden Danke!

    LG

    Tea Time


    • Bearbeitet tea time Freitag, 20. Januar 2012 13:04
    Donnerstag, 19. Januar 2012 17:41