Autor Beitrag
ChrYsi
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 23.10.08 22:01 
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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
Waldteufel
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
byte[] buf = new byte[10];
int num = tcpClient.Read(buf, 010); // gibt Anzahl der gelesenen Bytes zurück
if (num == 0) {
  // Client ist weg.
}


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