.
Anmeldung | Registrieren | Hilfe
in Suchen

NetworkStream und Timeout

Letzter Beitrag 13. Sep 2010 2:12 von GhostTyper. 3 Antworten.
Seite 1 von 1 (4 Treffer)
Beiträge sortieren: Zurück Weiter
  • 09. Sep 2010 22:17

    • GhostTyper
    • Top 500 Mitwirkender
    • Registriert am 09. Sep 2010
    • Beiträge 3
    • Punkte 45

    NetworkStream und Timeout

    Hallo,

    wenn ich einen BinaryReader verwende, dann den überliegenden Stream hole und einen TimeOut auf beispielsweisse eine Sekunde festlege, wird nach einer Sekunde vergeblichen lesens eine IOException ausgelöst. Wenn ich diese abfange und dann nochmal lesen möchte wird die IOException *sofort* (also ohne eine weitere Sekunde zu warten) ausgelöst.

    Dies verhält sich auch so, wenn ich den Timeout beim Abfangen der Exception und vor dem erneuten Lesen auf beispielsweise zwei Sekunden erhöhe.

    Ich möchte *so* in einer Verbindung feststellen, ob sie gerade "nicht viel zu tun hat". Dabei möchte ich zusätzlich immer auf Daten warten, um eine Exception zu bekommen, wenn die Verbindung geschlossen wurde. Daher kommt für mich die stream.DataAvailable-Property nicht in frage.

    Meine Frage: Kann ich, während ich auf Daten mit einem BinaryReader warte das Warten temporär unterbrechen um etwas anderes zu machen? Dabei reicht mir eine Lösung, in der ich z.B. abfragen kann, ob weitere Daten anliegen und ob die Netzwerkverbindung noch besteht. Einen zusätzlichen Thread zu öffnen ist keine Lösung.

    mg
    • IP-Adresse ist Registriert
  • 12. Sep 2010 21:12 Antwort zu

    • Lars Schmitt
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 22. Jan 2008
    • Witten
    • Beiträge 258
    • Punkte 4.340
    • Moderator

    NetworkStream und Timeout

    Hallo GhostTyper,

    warum ist ein zweiter Thread keine Lösung?

    Viele Grüße
    Lars
    • IP-Adresse ist Registriert
  • 12. Sep 2010 21:23 Antwort zu

    • Rainer Hilmer
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 22. Jan 2008
    • Braunschweig
    • Beiträge 927
    • Punkte 14.105

    NetworkStream und Timeout

    Wenn es schon kein eigener Thread sein darf (warum nicht?), wie wäre es dann mit einem eigenen Prozess, z.B.  Windows Service?
    Gruß,
    Rainer
    • IP-Adresse ist Registriert
  • 13. Sep 2010 2:12 Antwort zu

    • GhostTyper
    • Top 500 Mitwirkender
    • Registriert am 09. Sep 2010
    • Beiträge 3
    • Punkte 45

    NetworkStream und Timeout

    Da kein eigener Thread in frage kommt, kommt natürlich auch kein eigener Prozess in Frage.

    Ich erkläre kurz, warum ich auf jedenfall einen weiteren Thread verhindern möchte:

    Ich habe eine "Netzwerkprotokoll-Klasse" geschrieben, die "native Objekte" (int, float, etc...) serialisieren kann. Dafür gibt es eine Paketklasse. Die Netzwerkklasse kann Pakete verschicken und empfangen. Der Empfang läuft bereits Asynchron in einem eigenen Thread ab und empfangene Pakete werden über ein Event ausgespuckt.

    In dieser Netzwerkprotokoll-Klasse gibt es noch weitere Eventhandler. Einer, der gezogen wird, wenn die Verbindung beendet wurde und einer, der gezogen wird, "wenn die Verbindung nicht all zu viel zu tun hat (in den letzten X ms kein Paket empfangen wurde)".

    Das "Die Netzwerkverbindung hat gerade nicht viel zu tun" Event wäre ein wirklich nettes Feature, da dieses Protokoll in einem Spiel eingesetzt wird und es bei langsamen Verbindungen zu kurzen Aussetzern kommt, wenn z.B. eine Spielerliste übertragen wird.

    Das System muss über 1000 Spieler handlen können. Für mich würde ein extra Thread pro Verbindung also viele, viele Threads und somit auch Systemressourcen bedeuten.

    mg
    • IP-Adresse ist Registriert
Seite 1 von 1 (4 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum