TCP/IP - Probleme mit ListenThread

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von luckay.

    ich hab ja schon nen try catch block

    VB.NET-Quellcode

    1. Try
    2. Client.Connect(txtIP.Text, txtPort.Text)
    3. Catch ex As SystemException
    4. bListenTCPIP = False
    5. Stream.Close()
    6. Client.Close()
    7. txtAnzeige.AppendText(DateTime.Now & " : " & "Connection Fails" + vbCrLf)
    8. Exit Sub
    9. End Try

    dort hängt er sich dann auf. wenn ich den stream.close und client.close auskommentiere, gehts nach 3min weiter ... wenn ichs nicht mache zeigt er mir bezüglich dem client.connect das an:

    Ausnahme:Ausgelöst: "Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht ordnungsgemäß reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat" (System.Net.Sockets.SocketException)

    und dem stream.close folgendes:

    Ausnahme:Ausgelöst: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." (System.NullReferenceException)


    kann man diese zeitspanne fürs connecten nicht verkleinern? denn dann könnte ich den stream- und client-close weglassen ...
    Du kannst nur den SendTimeOut bestimmen, für den Connect gibt es in dieser Form keine Property. Was Du allerdings machen kannst ist mit einem Async-Connect zu arbeiten und diesen nach z.B. 10 sec abzubrechen.

    VB.NET-Quellcode

    1. Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    2. ' 10 Sekunden Connect Versuch
    3. Dim result As IAsyncResult = socket.BeginConnect(sIP, iPort, Nothing, Nothing)
    4. Dim success As Boolean = result.AsyncWaitHandle.WaitOne(10000, True)
    5. ' kein Erfolg ?
    6. If Not success Then
    7. ' closen und error oder return
    8. socket.Close()
    9. Throw New ApplicationException("Failed to connect to server")
    10. End If
    11. ' erfolgreich verbunden
    12. ' ...