Entwickler-Ecke
Netzwerk - Problem mit Socket und Telnet
ChrYsi - Do 23.10.08 22:01
Titel: Problem mit Socket und Telnet
Hi@all,
ich habe ein großes Problem und bitte um euren Rat.
Bin kein Experte, da ich nur bissl daheim programmiere. :?
Momentan versuche ich gerade einen Chat zu basteln.
Vorgehen:
Starten eines TCPListeners der auf Port 2222 auf eine neue Verbindungsanforderung wartet.
Kommt eine Verbindung öffnet er hierfür einen neuen TCPClient.
Wenn ich mich also mit Telnet auf meinen Server verbinde funktioniert alles noch einwandfrei.
Folgendes Problem:
Mir scheint es nun aber so, dass wenn ich Telnet beende, mein Server keinen Hinweis erhält, dass mein TCPClient nicht mehr verbunden ist.
Ich habe auch eine Abfrage eingebaut wie etwa "if(tcpClient.Client.Connect)"
allerdings bekomme ich hier immer true zurück, obwohl mein Telnet bereits geschlossen ist.
Falls jem. noch irgendwelche Fragen zu meinen Prob. hat einfach melden.
Kann mir irgendjemand helfen??? Bin echt am verzweifeln. :cry:
Mfg Ich
ChrYsi - So 26.10.08 19:26
Titel: Kurzer Nachtrag
Für alle dies denn so intressiert.
Ich hab mein Problem ganz einfach gelöst:
Einfach ein Zeichen an Telnet schicken, dass nicht dargestellet werden kann.
Entweder es kommt eine Socket-Exeption, die man abfängt und dann den Client löscht oder alles geht ganz normal weiter.
Dann wünsch ich erstmal noch einen schönen Abend.
Mfg Ich
Delete - Sa 01.11.08 15:33
Hallo ChrYsi.
Ob ein Client noch verbunden ist, lässt sich eigentlich nur direkt im Anschluss an eine Lese- oder Schreiboperation feststellen. Wenn sie fehlschlägt, also nichts gelesen wird, ist der Client wohl nicht mehr da.
Beispiel:
C#-Quelltext
1: 2: 3: 4: 5:
| byte[] buf = new byte[10]; int num = tcpClient.Read(buf, 0, 10); if (num == 0) { } |
Schwierig wird's, wenn du ein zeilenorientiertes Protokoll mittels
System.IO.StreamReader verwendest. Dann erhältst du eine leere Zeile sowohl, wenn der Client eine leere Zeile sendet, als auch, wenn die Verbindung nicht mehr besteht. Wenn du den Fall, dass der Client eine Leerzeile sendet, ausschließen kannst, ist diese Methode aber vielleicht sogar praktikabler.
Gruß
Waldteufel
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!