JJB
Cogito ergo brumm
Hallo zusammen !
Ich hab da ein Problem mit einer TCP Verbindung.
Und zwar mache ich Clientseitig über eine Socketverbindung eine Anfrage an einen Server.
In etwa so:
Der Client liesst nun, bis Serverseitig der Stream geschlossen wird.
Wenn ich nun aber will, dass die Verbindung schon vorher geschlossen wird, mache ich folgendes:
Damit wäre die Socketverbindung zwar geschlossen, aber der StreamReader erzeugt einen Fehler im Peek:
Daher meine Frage, wie kann ich eine bestehende TCP Socket Verbindung (auf der noch ein StreamReader liesst) beenden, ohne eine Exception auszulösen ?
Ich muss den StreamReader doch irgendwie unterbrechen können, ohne dass er einen Fehler erzeugt.
Bin für jede Hilfe dankbar.
Hochachtungsvoll, JJB
Ich hab da ein Problem mit einer TCP Verbindung.
Und zwar mache ich Clientseitig über eine Socketverbindung eine Anfrage an einen Server.
In etwa so:
Code:
Socket itsSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
// Starte Verbindung
IPEndPoint aEndpoint = new IPEndPoint(itsServerIP, itsPort);
itsSocket.Connect(aEndpoint);
NetworkStream itsNetworkStream = new NetworkStream(itsSocket);
StreamReader itsStreamReader = new StreamReader(itsNetworkStream);
// Lies Daten Zeilenweise ein, solange Stream verfügbar
while((itsStreamReader.Peek() >=0))
{
String aString = itsStreamReader.ReadLine();
}
Der Client liesst nun, bis Serverseitig der Stream geschlossen wird.
Wenn ich nun aber will, dass die Verbindung schon vorher geschlossen wird, mache ich folgendes:
Code:
// Informiere Server über vorzeitiges Ende
SendKillSignal()
// Schließe Streams
if(itsStreamReader != null)
itsStreamReader.Close();
if(itsNetworkStream != null)
itsNetworkStream.Close();
// Schließe Socket
if(itsSocket.Connected)
itsSocket.Close();
Damit wäre die Socketverbindung zwar geschlossen, aber der StreamReader erzeugt einen Fehler im Peek:
Code:
Exception: System.IO.IOException
Message: Von der Übertragungsverbindung können keine Daten gelesen werden.
Source: System
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.IO.StreamReader.ReadBuffer()
at System.IO.StreamReader.Peek()
at MyNameSpace.MyClass.ReceiveThread() in c:\home\MyNameSpace\MyClass.cs:line 488
Nested Exception
Exception: System.Net.Sockets.SocketException
Message: Eine bestehende Verbindung wurde softwaregesteuert
durch den Hostcomputer abgebrochen
Source: System
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
Daher meine Frage, wie kann ich eine bestehende TCP Socket Verbindung (auf der noch ein StreamReader liesst) beenden, ohne eine Exception auszulösen ?
Ich muss den StreamReader doch irgendwie unterbrechen können, ohne dass er einen Fehler erzeugt.
Bin für jede Hilfe dankbar.
Hochachtungsvoll, JJB