Winsock Fehler 40006

Reno Reckling

Grünschnabel
Hi
Ich habe ein kleines Winsock Problem, das einige Programme von mir recht kompliziert macht und ich wollte mal fragen ob man das auch anders lösen kann.
Kleine Erklärung vorweg:
servernum = Anzahl der Server
sendstring ist ein String in dem alle zu versendenden Operationen mittels Seperator hintereinander gehängt wurden. Zuerst die Zahl der Server, danach ihr Adressen.
Der Seperator ist „*_*“
Diese sieht in etwa so aus:
2*_*192.168.115.112*_*192.168.115.1*_*
das ist soweit ja kein Problem, wenn ich das ganze an einen Timer kopple und immer bei jedem Durchlauf ein Häppchen sende.
Sobald ich die Do While unten stehende Schleife verwende, bekomme ich den Fehler 40006
„Falsches Protokoll oder Verbindungszustand für die angeforderte Transaktion oder Anforderung“
Kann mir jemand sagen woran das liegt?
Entsprechendes Empfangsprogramm ist natürlich vorhanden.

Mit freundlichen Grüßen
Reno Reckling

Code:
servernum = List1.ListCount
sendstring = Str(servernum) + "*_*"
For e = 0 To List1.ListCount - 1
List1.ListIndex = e
sendstring = sendstring + List1.Text + "*_*"
Next e

For a = 0 To List1.ListCount - 1
List1.ListIndex = a
deliverstring = deliverstring + List1.Text + "*_*"
Next a
dtempstring = deliverstring
Do Until InStr(dtempstring, "*_*") = 0
    If Main.Winsock1.State = sckClosed Then
        tempstring = sendstring
        Winsock1.RemoteHost = Mid(dtempstring, 1, InStr(dtempstring, "*_*") - 1)
        Winsock1.RemotePort = 50
        Winsock1.Connect
    Else
        If InStr(tempstring, "*_*") = 0 Then
            dtempstring = Mid(dtempstring, InStr(dtempstring, "*_*") + 3)
            Winsock1.Close
        Else
            zu_senden = Mid(tempstring, 1, InStr(tempstring, "*_*") - 1)
            Winsock1.SendData zu_senden
            tempstring = Mid(tempstring, InStr(tempstring, "*_*") + 3)
        End If
    End If
DoEvents
Loop
 
Besteht das Problem immer noch? Bist du deinen Code mal mit dem Debugger zeilenweise durchgegangen? Vielleicht schließt du die Verbindung mit "Winsock1.Close" und verlässt die Schleife aber nicht, so dass weitere Daten gesendet werden ohne dass die Verbindung besteht. (Oder der Verbindungszustand ist in der Zeile
Code:
If Main.Winsock1.State = sckClosed Then
nicht "sckClosed" sondern "sckClosing")
 
Ja das problem besteht teilweise noch!
Aber ich habe jetzt eine andere Lösung gefunden:

Code:
Dim ret
servernum = List1.ListCount
sendstring = "START!*_*" + Str(servernum) + "*_*"
For e = 0 To List1.ListCount - 1
List1.ListIndex = e
sendstring = sendstring + List1.Text + "*_*"
Next e

For a = 0 To List1.ListCount - 1
List1.ListIndex = a
deliverstring = deliverstring + List1.Text + "*_*"
Next a
dtempstring = deliverstring
Do While InStr(dtempstring, "*_*") <> 0
    If Main.Winsock1.State = sckClosed Then
        ret = DoEvents()
        tempstring = sendstring
        Winsock1.RemoteHost = Mid(dtempstring, 1, InStr(dtempstring, "*_*") - 1)
        Winsock1.RemotePort = 50
        Winsock1.Connect
    Else
        If InStr(tempstring, "*_*") = 0 Then
            ret = DoEvents()
            dtempstring = Mid(dtempstring, InStr(dtempstring, "*_*") + 3)
            Winsock1.Close
        Else
            zu_senden = Mid(tempstring, 1, InStr(tempstring, "*_*") - 1)
            ret = DoEvents()
            Winsock1.SendData zu_senden
            tempstring = Mid(tempstring, InStr(tempstring, "*_*") + 3)
        End If
    End If
Loop
 
Zurück