• Nabend,
    nachdem ich gestern endlich Windows 10 auf mein Toshiba ShitTab gekriegt habe, wollte ich jetzt mal den ganzen C# Kram aufsetzen.
    Ich muss zugeben, dass es etwas her ist, seitdem ich TCP in C# benutzt habe oder überhaupt C#.
    Naja jedenfalls funktioniert der ganze Client-Server Ablauf nicht so richtig.
    Die Verbindung kann aufgebaut werden, und das Bild auf der Serverseite wird auch richtig eingelesen.
    Beim Übertragen scheint jedoch ein Fehler zu passieren. Auf der Clientseite kommen nur 64 KB des 2.2 MB Bildes an und auf der Server Seite wird eine Exception ("Connection reset by peer").
    Kennt da einer eine Abhilfe?

    Server Seite (mit wundervoller Mono Formatierung):
    http://pastebin.com/K4RwFEML

    Client Seite:
    http://pastebin.com/d61PLFDU

    Ich vermute die Verbindung wird frühzeitig beendet oder die BufferSize ist zu klein.

    Es ist besser nicht zu moderieren als falsch zu moderieren

    Einmal editiert, zuletzt von Der Doktor (29. August 2015 um 19:25)

  • Vermutlich ist die Buffergröße im Client hart auf 64 KB limitiert. Allerdings ist das von dir implementierte Verfahren, eine Datei komplett einzulesen und mit einem einzigen Send-Befehl verschicken zu wollen, sehr unüblich. Meistens wählt man einen ausreichend großes Buffer-Array (typischerweise 4 oder 8 KB groß, in jedem Fall immer noch deutlich größer als ein einzelnes TCP-Segment) und liest bzw. schreibt in einer Schleife, bis der Quellstream am Ende ist (Read gibt 0 zurück).
    Eine effizientere Lösung ist, einen FileStream und NetworkStream zu öffnen und die CopyTo-Methode der Stream-Klasse zu nutzen, um sämtliche vorhandenen Daten von einen in den anderen Stream zu kopieren.


  • Vermutlich ist die Buffergröße im Client hart auf 64 KB limitiert. Allerdings ist das von dir implementierte Verfahren, eine Datei komplett einzulesen und mit einem einzigen Send-Befehl verschicken zu wollen, sehr unüblich. Meistens wählt man einen ausreichend großes Buffer-Array (typischerweise 4 oder 8 KB groß, in jedem Fall immer noch deutlich größer als ein einzelnes TCP-Segment) und liest bzw. schreibt in einer Schleife, bis der Quellstream am Ende ist (Read gibt 0 zurück).
    Eine effizientere Lösung ist, einen FileStream und NetworkStream zu öffnen und die CopyTo-Methode der Stream-Klasse zu nutzen, um sämtliche vorhandenen Daten von einen in den anderen Stream zu kopieren.

    Naja hab ja gesagt, dass es etwas her ist :fresse: Musste mich vorhin erstmal wieder einlesen.
    Werd mal die CopyTo Methode ausprobieren.

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • CopyTo hat den Job gemacht. Auf die Methode hätte ich eigentlich selber drauf kommen können.... naja :D
    Mal besser das C# Buch wieder rauskramen.

    Es ist besser nicht zu moderieren als falsch zu moderieren

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!