Chat über Winsock

MAN

Erfahrenes Mitglied
Hallo,

kennt jemand ein gutes zu 100% funktionierendes Winsock-Tutorial (oder einfach nur Quellcode) das beim Connecten nach eine connect und disconnect nicht gleich abstürzt, sondern wieder verbindet?

Sprich, ich habe folgendes Problem:

- Server wird gestartet und wird auf Lsiten gesetzt
- Client wird gestartet und verbindet sich mit Server (Datenübertragung funktioniert)
- Dann ruft Client einen disconnect auf (Verbindung wird getrennt (sollte getrennt werden) )
- Client wird erneut gestartet und ruft connect auf => dann kommt der Fehler: Adress in Use

Oder weiß jemand, wie ich dieses Problem umgehen kann?


mfG

MAN
 
So, das müsstest du meiner Meinung nach beim Server noch hinzufügen:

Code:
Private Sub wsck_main_Close()
    wsck_main.Close
    wsck_main.Listen
End Sub

(Bei mir heißt das Winsock-Control "wsck")



MfG
Jiekas
 
Hm... so etwas ähnliches hatte ich auch schon probiert, kommt aber leider (auch nach deinem Code) exakt die gleiche Fehlermeldung nochmal.

Vielleicht noch eine Idee, wie ich es zum Laufen bringe?

mfG

MAN
 
Ich baue einen timer mit ein, der überprüft alle paar Sekunden, ob das winsock (oder mehrere) den state 8 haben (8 = closing, wenn der client die verbindung beendet hat, der server allerdings noch das WinSock offen hat). Falls das dann der Fall ist, close einfach das winsock und setzte es auf listening. funktioniert PERFEKT :)


z.B:

Sub Timer1_timer()

if WinSock.state=8 then
WinSock.close
doevents
WinSock.listen
end if

end sub

und schon ist dein winsock für eine neue verbindung bereit...
 
Zuletzt bearbeitet:
Ich hab es jetzt mal ausprobiert, funktionierte ebenfalls nicht.
Es lag anscheinend an was anderem und zwar war der LocalPort vom Client bei der Fehlermeldung "Adress in use" gemeint. Sprich, der Port wurde nicht freigegeben (vom Client oder vom Server).

edit:
Er wird erst nach ca 2 Minuten wieder freigegeben, warum?


Habe das ganz geschickt gelöst und habe dem Client bei jedem start einen random port gegeben. Somit läßt sich der Fehler umgehen, is jedoch keine perfekte Lösung.

Wer noch irgendwie einen Tipp hat, wie man das Problem anders und vor allem gut lösen kann, solle bitte posten!

Vielen Dank!


mfG

MAN
 
Zuletzt bearbeitet:
wie viele clients hast du denn?

wenn du ein winsock(0) immer auf listen hast, und dann einfach mit winsock.add ein neues winsock hinzufügst, wenn ein client sich zu verbinden versucht, und den client mit dem neuen winsock verbindest, dann dürftest du eigentlich keine probleme mit "adress in use" haben...probier mal...
 
Theoretisch hätte ich immer nur zwei Clients, da es ein 1on1 Game wird (der Chat soll das einfach nur darstellen, dann wird halt nicht Text, sondern GameDaten übertragen).
Es gibt einen Server der immer läuft und mindestens und höchstens 2 Clients.

Das mit Winsock(0) wäre gar keine so schlechte Idee, müßte ich ausprobieren, jedoch habe ich mitlerweile im Moment die Zeit nicht mehr dazu, bis ich das ausprobieren kann dauert....

Aber trotzdem vielen Dank für die Antwort, hoffe das klappt so! ;)

mfG

MAN
 
Zurück