tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1290
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    nerv_nich nerv_nich ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    2
    Hi,
    ich habe einen Artikel über Networking auf der MSDN Seite gefunden aber eine kleine Passage versteh ich nicht.
    http://www.microsoft.com/germany/msd....mspx?mfr=true

    im Listing 6, also fast ganz unten wird der Stream zwischen Client und Server gelesen
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    try
          {
            // Hole nächsten Zeitstring vom Server
            String time = inStream.ReadLine ();
            // Setze das Schleifen-Flag zurück
            // wenn der Server aufgehört hat zu senden
            loop = !time.Equals ( "" );
            // Gib die Zeit auf der Console aus
            Console.WriteLine ( time );
          }

    Wenn ich den server nach jedem Senden z.B. 5 Sekunden anhalte bricht der Client nicht ab, obwohl er abfragt ob ReadLine etwas ausgelesen hat und bei nem leeren String aus der Schleife gehen würde.
    Liest ReadLine eintfach weiter obwohl der Server nichts sendet oder was passiert da? und wann bricht er ab? zu irgendwas muss die Zeile doch gut sein.
    wär nett wenn mir das einer erklären könnte.

    mfg
     

  2. #2
    TommyMo TommyMo ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Beiträge
    261
    Hi!

    Ich habe mich ebenfalls mit dem Beispiel beschäftigt.

    Wie hast du denn den Server unterbrochen? Direkt nach dem Senden der time-Variable, wie hier gezeigt (Klasse ServerThread)?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    while (loop)
    {
      // fetch current time
      String time = DateTime.Now.ToString();
      // send time when it differs from the previous sent message
      if (!time.Equals(buffer))
      {
        // convert the time string to a byte-array and add 
        // a carriage-return linefeed
        Byte[] tosend = Encoding.ASCII.GetBytes(time + "\r\n");
        // send bytes to the client
        ostream.Write(tosend, 0, tosend.Length);
        // save sent time
        buffer = time;
      }
     
      [COLOR="Red"]
      // HALTE DEN THREAD FÜR 5 SEKUNDEN AN
      Thread.Sleep(5000);
      [/COLOR]
      
      loop = !this.STOP;
    }

    Wenn dem so ist, dann denke ich, dass der gesamte Thread des Clients aufgehalten wird, also auch das Lesen des Streams. Leider bin ich nicht der Spezialist was Threads angeht, für mich wäre das aber eine logische Erklärung. Der Client ist ja diesem Thread zugeordnet. Ersetzt man beim Senden des Byte-Arrays die Variable time durch "", so bricht, zumindest bei mir, der Client ordnungsgemäß ab.

    Gruß,
    Tom
     
    alles Gute kommt von ...

  3. #3
    nerv_nich nerv_nich ist offline Grünschnabel
    Registriert seit
    Sep 2007
    Beiträge
    2
    ich habe im lese-thread kein sleep. einen schreibthread habe ich im client nicht, da er nur infos abruft. im server sieht das alles so ähnlich aus aber da sind alle interaktionen in verschiedenen threads...
    hier mein code, so hab ich das jetzt am laufen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
            public void Run()
            {
                // so lage versuchen zu connecten bis es funktioniert hat
                connect();
                this._runrunning = true;
                bool loop = !this.stop;
                while (loop)
                {
                    try
                    {
                        string ReadTXT = inStream.ReadLine();
                        // CODE ....
                        //...
                        //...
                        //...
                    }
                    catch (Exception ex)
                    {
                        FrontEndControl.UpdateBotLog("#### Fehler: " + ex.Message + Environment.NewLine, identstring);
                        FrontEndControl.UpdateBotLog(ex.StackTrace + Environment.NewLine, identstring);
                        connect();
                    }
                    loop = !this.stop;
                }
                // Schließe die Verbindung zum Client
                this.connection.Close();
                // Setze das Flag "Thread läuft" zurück
                this._runrunning = false;
            }

    ich denke der erfolg von ReadLine hängt nicht davon ab ob aktuell etwas im stream steht sondern ob die verbindung steht und er wartet einfach bis etwas gesendet wid.
     

Ähnliche Themen

  1. Eine kleine Frage!
    Von Blümchen im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 10.08.05, 15:27
  2. Eine kleine Frage...
    Von DoggieStyle im Forum Fun-Forum
    Antworten: 21
    Letzter Beitrag: 19.04.03, 04:26
  3. klitze kleine nub frage :]
    Von immo` im Forum 3D Studio Max
    Antworten: 24
    Letzter Beitrag: 05.01.03, 22:45
  4. Klitze Kleine Frage
    Von TrueSeßphiroth im Forum Photoshop
    Antworten: 6
    Letzter Beitrag: 21.10.02, 17:50
  5. Eine kleine Frage
    Von Jack im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 16.08.01, 09:50