ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1290
1290
EMPFEHLEN
-
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
-
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ß,
Tomalles Gute kommt von ...
-
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
-
Eine kleine Frage!
Von Blümchen im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 10.08.05, 15:27 -
Eine kleine Frage...
Von DoggieStyle im Forum Fun-ForumAntworten: 21Letzter Beitrag: 19.04.03, 04:26 -
klitze kleine nub frage :]
Von immo` im Forum 3D Studio MaxAntworten: 24Letzter Beitrag: 05.01.03, 22:45 -
Klitze Kleine Frage
Von TrueSeßphiroth im Forum PhotoshopAntworten: 6Letzter Beitrag: 21.10.02, 17:50 -
Eine kleine Frage
Von Jack im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 16.08.01, 09:50





Zitieren
Login





