Socket Exception wurde nicht behandelt - was tun?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Rinecamo.

    Socket Exception wurde nicht behandelt - was tun?

    Hallo zusammen,

    ich brauche dringend eure Hilfe. ;)

    Seit ein paar Woch entwickle ich ein TCP/IP-Tool in Visual Basic, mit dem man Remote-Zugriff auf einen anderen Rechner bekommt, wenn auf diesem Rechner die entsprechende Software installiert ist.

    Bis jetzt funktionierte alles auch ganz gut, aber seit heute bekomme ich folgende Fehlermeldung:


    Ich habe keine Ahnung, warum diese Meldung nun auf einmal erscheint. Ebenso habe ich keine AHnung, wie ich das Porblem beheben kann.

    Viele Grüße und Danke schonmal im Vorraus,
    anga

    Mono schrieb:

    Offensichtlich (ins Blaue geraten) startest du 2 TcpListener auf der selben IP und demselben Port.

    Danke für die schnelle Antwort.

    Das was du schreibst, habe ich bereits kontrolliert und finde keine Stelle, an der 2 Listener gestartet werden.

    Der Fehler tritt an dieser Stelle auf:

    VB.NET-Quellcode

    1. Private Sub listening()
    2. listener.Start()
    3. End Sub


    Manachmal klappt es, das notdürftig mit einer If-Abrage zu fixen, aber dann mekert er an einer anderen Stelle dies:


    Vieleicht hilft das weiter.
    anga
    Die Frage ist, wird diese Prozedur ggf. 2 mal aufgerufen? (unabsichtlich?)
    Mach dir einen Haltepunkt auf Sub listen.
    Und prüfe, wie oft diese Prozedur angesprochen wird.
    Das ist meine Signatur und sie wird wunderbar sein!
    Ich kenne mich mit den Haltepunkten nicht so aus und kann das so nicht reproduzieren. Aber vlt. hilft dir der Code weiter:


    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.Net.Dns
    3. Imports System.Threading
    4. Imports System.IO
    5. Public Class Form1
    6. Dim listener As New TcpListener(55555)
    7. Dim client As TcpClient
    8. Dim message As String = ""
    9. Public offen As Boolean = False
    10. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    11. Dim listthread As New Thread(New ThreadStart(AddressOf listening))
    12. listthread.Start()
    13. End Sub
    14. Private Sub listening()
    15. Try
    16. listener.Start()
    17. Catch ex As Exception
    18. End Try
    19. End Sub
    20. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    21. listener.Stop()
    22. End Sub
    23. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    24. If TextBox1.Text = "" Then
    25. MsgBox("Es wurde keine IP-Adresse übergeben!", MsgBoxStyle.Exclamation)
    26. Else
    27. If TextBox2.Text = "" Then
    28. MsgBox("Es wurde keine Anweisung übergeben!", MsgBoxStyle.Exclamation)
    29. Else
    30. Cursor = Cursors.WaitCursor
    31. Button1.Enabled = False
    32. Dim nachricht As String, authpw As String, senderip As String
    33. Try
    34. authpw = "123456789012345678"
    35. senderip = Label5.Text
    36. nachricht = authpw & ";" & senderip & ";"
    37. Select Case ListBox1.SelectedIndex
    38. Case 0
    39. nachricht += "00" & TextBox2.Text
    40. Case 1
    41. nachricht += "01" & TextBox2.Text
    42. Case 2
    43. nachricht += "02" & TextBox2.Text
    44. Case 3
    45. nachricht += "03" & TextBox2.Text
    46. Case 4
    47. nachricht += "04" & TextBox2.Text
    48. Case Else
    49. nachricht += ""
    50. End Select
    51. client = New TcpClient(TextBox1.Text, 55555)
    52. Dim writer As New StreamWriter(client.GetStream())
    53. writer.Write(nachricht)
    54. writer.Flush()
    55. TextBox2.Clear()
    56. Catch ex As Exception
    57. MsgBox("Die Verbindung zum Zielrechner konnte nicht hergestellt werden!" & vbCrLf & "Eventuell läuft de Software auf dem Zeilcomputer nicht.", MsgBoxStyle.Critical)
    58. End Try
    59. End If
    60. End If
    61. End Sub
    62. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    63. Try
    64. If listener.Pending = True Then
    65. message = ""
    66. client = listener.AcceptTcpClient()
    67. Dim reader As New StreamReader(client.GetStream())
    68. While reader.Peek > -1
    69. message = message + Convert.ToChar(reader.Read()).ToString
    70. End While
    71. empfangsmodul(message)
    72. Else : End If
    73. Catch ex As Exception
    74. End Try
    75. End Sub
    76. Private Sub empfangsmodul(ByVal message As String)
    77. Dim befehl As String, parameter As String, authpw As String
    78. Dim senderpw As String, senderIP As String, pos1 As Integer
    79. authpw = "123456789012345678"
    80. senderpw = Mid(message, 1, 18)
    81. pos1 = InStr(20, message, ";")
    82. senderIP = Mid(message, 20, pos1 - 20)
    83. befehl = Mid(message, pos1 + 1, 2)
    84. parameter = Mid(message, pos1 + 3)
    85. If senderpw = authpw Then
    86. Select Case befehl
    87. Case "00"
    88. Shell(parameter, AppWinStyle.MaximizedFocus)
    89. Case "01"
    90. Shell("taskkill /IM " & parameter)
    91. Case "02"
    92. MsgBox(parameter, MsgBoxStyle.Information, "Information")
    93. Case "03"
    94. MsgBox(parameter, MsgBoxStyle.Exclamation, "Hinweis")
    95. Case "04"
    96. MsgBox(parameter, MsgBoxStyle.Critical, "Fehler")
    97. Case Else
    98. End Select
    99. Else : End If
    100. End Sub
    101. End Class
    Uff, ich weiss gar nicht wo ich anfangen soll.
    Ich denke, du solltest das Ganze nochmal rein konzeptionell überdenken.

    Ich habe leider keine Zeit, dir alle Unschönheiten und Mängel jetzt aufzuzeigen.
    Eventuell kann ich es mir heute abend nochmal anschauen.

    Gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:

    Uff, ich weiss gar nicht wo ich anfangen soll.
    Ich denke, du solltest das Ganze nochmal rein konzeptionell überdenken.

    Ich habe leider keine Zeit, dir alle Unschönheiten und Mängel jetzt aufzuzeigen.
    Eventuell kann ich es mir heute abend nochmal anschauen.

    Gruss mono
    War vielleicht eine blöde Ide, die den ganzen Code hinzuknallen. Und ich möchte auch nicht, dass du mir da irgendwie Nachhilfe gibst.
    Mit geht es wirklich nur um diesen einzigen Fehler - den Rest versuche ich dann selber gerade zubiegen.

    Trotzdem danke.
    anga
    Hallo anga,

    ich hatte ein ähnliches Problem vom Sempertutorial. Probier mal im Form Load Ereigniss den Timer auszuschalten
    Timer1.Enabled = False

    und dann wenn die Form geladen ist wieder zu aktivieren.

    Timer1.Enabled = true.

    Hat bei mir geholfen.

    Grüße