winsock

MS-Winsock control hat n paar FATALA makken!

Daher würde ich dir empfehlen ein eigenes Steuerellement zu coden! (Für Clients)
Für Server kannste das von MS her nehmen!

Habe grad keinen Code da, den Ich veröffentlichen möchte, daher schreib ich mal schnell was ähnliches! (Bitte verzeit mit kleine Fehler) :)

SERVER: (WEB)
=============
Benötigt:
Winsock1
Winsock2(index)


=CODE=
Code:
Private Sub Form_Load()
Winsock1_Close
end Sub

Private Sub Winsock1_Close()
if Winsock1.state <> sckClosed then
    Winsock1.Close
endif
Winsock1.RemoteHost = 127.0.0.1
Winsock1.RemotePort = 80
Winsock1.LocalPort = 80
Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(requestiD as long)
Dim X as long
for x = 0 to 100
if winsock2(x).state = sckclosed then
winsock2(x).accept requestid
next
winsock1_close
end sub

Private Sub Winsock1_Error(number as integer, Description as string)
winsock1_close
end Sub

Private Sub Winsock2_Close(Index as integer)
Winsock2(index).close
end sub

Private Sub Winsock2_Error(index as integer,number as integer, Description as string)
Winsock2_close index
end sub

===============================================
CLIENT

Als client solltest du dir n eigenes Steuerellement schreiben, da das von MS den fehler hat, bei einem "Internen"Fehler, oder bei einem falschen commando sich nicht richtig zu Terminieren!
HEIST: Nach dem Beenden einer verbindung (via Error oder END Befehl) kann es passieren, das sich bei dem versuch, die verbindung erneut zu erstellen, eine fehlermeldung ausgegeben wird! (Verbindungsversuch gescheitert oder so, FEHLER: Port bereits in benutzung! oder so)

Das Liegt daran, das in der IP-Port-Tabelle von Windoff die verbindungsdaten der letzten connection nicht gelöscht wurden!, was zur folge hat, das dein steuerellement die meldung aus gibt,: das diese Daten bereits in benutzung sind!

Dies kann man NUR umgehen, indem man ne zeitlang wartet, ca. 5min. oder länger ... oder den rechner neu startet!

Allerdings gibts da auch noch die möglichkeit, sich selbst ein Control zu schreiben!, oder die vollnutzung von APIs!

Ich hab mir n steuerellement geschrieben, das erleichtert das ganze ENORM!

Da ich in dem OCX noch einiges hinzu geschrieben habe, das ich nicht unbedingt veröffentlichen möchte, kann ich nur empfehlen, das Ihr mal n Blink in "API-Guide" werft!

Dort findet sich unter SOCKETs oder WINSOCK n haufen APIs, die zur herstellung von Verbingungen dienen!

Der vorteil daran ist, das Ihr die Tabelle direkt beschreibt, und die daten hinterlegt!
Bei gelegenheit, werde ich mal n kleinen auszug aud dem OCX bereitstellen, in dem das genau beschrieben ist! ... habe nur momentan leider nicht viel zeit!

Trotzdem hoffe ich, das dir das helfen wird!

Viel Erfolg noch!

Greez
Martin
 
Zuletzt bearbeitet:
wenn ich mir überlege wie viel du in die antowert investierst hast dann tut es mir leid, dass ich meine frege nicht unzweideutig gestellt habe -.-
denn falls ich dich richtig verstehe ist dein code dazu da, dass ein server mehere clients (100) annehmen kann.
mein problem aber ist ein geringeres! es gibt nur einen server und nur einen client, die sollen aber mehrmals eine verbindung eingehen können. also nach einem dissconnect soll der server wieder in warte-stellung gehen damit man mit dem client erneut connecten kann.
 
Kein Problem!
...
Da hast du recht!

Aber im grunde ist es das selbe!

Du must halt nur alle (Index) und (Index as integer) raus nehmen!
Dann tust du noch Winsock2 zu Winsock1 umschreiben!

Das mit dem Controlsladen und so, kannste dir dann ja auch sparen! ;-]

Jetzt ist es eigentlich das, was du willst!

Der Code, der da steht, muss so umfangreich sein!

Das mit der Client musst du ja nicht machen! Ist halt nur n vorschlag gewessen, wenn du mal einen clienten schreiben möchtest! (egal für felchen service! (FTP,HTTP,SMTP,...))
Das Winsock ist GRUNDSÄTZLICH bei verbindungs HERSTELLUNG sehr fehler-anfällig!

Aber wie schon gesagt, ist nur ein kleiner TIP. :rolleyes:


Geets
Martin
 
Zurück