Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
EightBitWitch
Newbie
Newbie

Anmeldedatum: 16.03.2009
Beiträge: 4

TCPClient: Wie Verbindung nach Verbind.abbau wieder aufbauen
Verfasst am: 16.03.2009, 07:09

Hallo,

Ich schreibe eine TcpClient-Anwendung, die sich mit eine Server verbindet und die vom Server gesendeten Daten verarbeitet.
Das klappt auch sehr gut.

Nun ist es so, das der Server jeden Tag zu einer festgelegten Zeit die Verbindung abbaut - ca. 30 Sekunden lang für interne Sicherungszwecke).

Nun bekomme ich es nicht hin, die Verbindung wieder aufzubauen. Ich bekomme folgende Fehlermeldung von VB 2008:
Code:
Unbehandelte Ausnahme: System.Net.Sockets.SocketException:
Eine Verbindungsanforderung bezog sich auf einen bereits verbundenen Socket


Ich öffne die Verbindung wie folgt:
Code:
Dim tcpClient As New System.Net.Sockets.TcpClient()
tcpClient.Connect(IP, Port)


Wenn ich nun tcpClient.Connect wieder aufrufe bekomme ich obrige Fehlermeldung

Wenn ich die Verbindung vorher mit tcpClient.Close() schliesse (was ja logisch wäre)
bekomme ich folgende Fehlermeldung:

Code:
Unbehandelte Ausnahme: System.ObjectDisposedException:
Auf das verworfene Objekt kann nicht zugegriffen werden.
Objektname: "System.Net.Sockets.TcpClient"


Ist eigentlich auch ganz logisch, weil ich der Beschreibunf zu tcpClient-Close() steht, das das Object(tcpClient) komplett verworfen wird.

Mit Dim tcpClient .... kann ich aber im Programmfluss das Object nicht wieder neu erstellen (siehe oben), wenn ich das versuche bekomme ich folgende Fehlermeldung:
Code:
Unbehandelte Ausnahme: System.Net.Sockets.SocketException:
Eine Verbindungsanforderung bezog sich auf einen bereits verbundenen Socket
bei System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)


Und ich finde keine Möglichkeit die Verbindung und nur die Verbindung zum Server zu trenne um sie dann später neu aufzubauen.
Wahrscheinlich bin ich mal wieder blind oder die VB2008/Net-Entwickler habe das sehr gut versteckt.
_________________
8-Bit sind genug ....
 
EightBitWitch
Newbie
Newbie

Anmeldedatum: 16.03.2009
Beiträge: 4


Verfasst am: 16.03.2009, 09:36

Ich habe über eine Umweg (Beschreibung un Beispiel zu der Socket-Klasse) eine Lösung gefunden.

Die Lösung sieht wie folgt aus:
Im Deklarationsteil baue ich eine leere Hülle für tcpClient auf

Code:
Dim tcpClient As System.Net.Sockets.TcpClient = Nothing
Dim ClientSollLaufen as boolean = true
Dim ServerNotDown as boolean =true


Und in der Programmschleife, wo das eigentliche Client-Programm drin läuft fülle ich die Hülle mit leben und hauche dieser am Ende das Leben wieder aus, um es im nächsten Durchgang neu erstehen zu lassen:

Code:
while ClientSollLaufen
      tcpClient = New System.Net.Sockets.TcpClient()
      tcpClient.Connect(IP, PORT)
      networkStream = tcpClient.GetStream()

      while ServerNotDown

            '****************
            'Client-Programm
            '****************

            if DownTime then
                  ServerNotDown = false
            end if
       end while
     
       tcpClient.Close()

       if ReadKey()="0" then
            'Client beenden
            ClientSollLaufen = False
       else
            'Zwei Minuten warten
       end if
end while


Es klappt und ist, wenn man objektorientiert denkt auch in sich logisch, aber nicht effizient (wie vieles an der OOP).
Ja, diese verflixte objektorientierte Programmierung ... das gab es zur Zeiten des Commodore 64 nicht und ab Turbo Pascal 5.5 habe ich mich auch immer drum rum gedrückt.
_________________
8-Bit sind genug ....
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: tcpclient, socket, objekt, das, zugegriffen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [gelöst] String in Integer umwandeln klappt nicht (XML, ASP) 338 06.11.2011, 21:12
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 869 09.06.2011, 12:19
Keine neuen Beiträge Ogame Login klappt nicht 1837 12.02.2008, 15:36
Keine neuen Beiträge VB daten kompilieren? 724 23.04.2007, 13:34
Keine neuen Beiträge Daten in einen Ordner schreiben 808 25.03.2007, 13:12
 



[ Time: 0.1686s ][ Queries: 85 (0.0337s) ][ GZIP on - Debug on ]