C# Einsteigerfragen

14/08/2009 - 13:39 von Susan Bachmann | Report spam
Hallo,

ich mal wieder mit Einsteigerfragen!

Ich bin aktuell am "rumbasteln" mit TCP-Netzwerkverbindungen, meine App
verbindet sich auf einen Server.

Senden & Empfangen geschieht asynchron. Wenn ich den Server beende
(korrekt, oder abschießen), dann wird auf Netzebene ja entweder der
FIN/ACK Handshake gemacht oder eben ein RST.

Benutze ich in C# direkt Sockets, dann kreige ich erst dann eine
Exception, wenn ich das *nàchste* Mal auf den Socket Senden will.

Benutze ich TcpClient, dann kriege ich beim Beenden des Servers sofort
eine Exception. Das verwirrt mich doch schon etwas: wenn man in C++ mit
Sockets arbeitet kriegt man auch sofort einen Fehler geliefert.


Frage zu Threads:
mein (Forms) Programm startet eine Netzwerk-Worker-Thread um die
Netzwerkevents zu verarbeiten. Klicke ich im Form auf das 'x', dann
beendet sich das Programm nicht, ich denke es liegt daran, dass die
Thread noch làuft.
Wenn ich ein natives C++ Programm abschieße, dann werden automatisch
auch alle Threads beendet.wieso ist das in C# nicht auch so?
 

Lesen sie die antworten

#1 Peter Brightman
16/08/2009 - 11:46 | Warnen spam
Susan Bachmann schrieb:
Hallo,

ich mal wieder mit Einsteigerfragen!

Ich bin aktuell am "rumbasteln" mit TCP-Netzwerkverbindungen, meine App
verbindet sich auf einen Server.

Senden & Empfangen geschieht asynchron. Wenn ich den Server beende
(korrekt, oder abschießen), dann wird auf Netzebene ja entweder der
FIN/ACK Handshake gemacht oder eben ein RST.

Benutze ich in C# direkt Sockets, dann kreige ich erst dann eine
Exception, wenn ich das *nàchste* Mal auf den Socket Senden will.



hi Susan,
benutz doch BeginReceive(), denn wenn der Server die Verbindung graceful
beendet dann wird die ReceiveCallback-methode aufgerufen, um zu erkennen
dass es ein quasi ein Close und kein Receive ist, muss man nur die
Anzahl gesendeter bytes abfragen, die in diesem Falle 0 ist. Dann kannst
du den socket schließen.
Gruß,
Peter

Ähnliche fragen