Problem mit MSWinsock
lima-city → Forum → Programmiersprachen → Basic
adresse
aktuellen status
beispiel
bestimmte aktion
client
direktverbindung
fehler
fenster
formen
fr
port
revers
router
socket
speziellen einstellungen
stat
steuerelement
timeout
weiterleitung
zurck
-
Moin.
Also ich wollte gerade meine Kenntnisse über MSWinsock ein wenig verbessern.
Deshalb habe ich mir mal schnell einen Chat zusammengebaut den man sowohl als Server als auch als Client benutzen kann.
Aber nehmen wir mal an die Verbindung zwischen Server und Client ist hergestellt.
Also 'winsock.state' gib auch eine '7' zurück. Wenn nun aber der Client die Verbindung beendet, Nun wird bei Server und bei Client '0' ausgegeben, der Server aber nun wieder in den Listen Mode übergeht ('2' wird ausgegeben) und der Client erneut versucht zu Connecten funktioniert dies nicht und im Client wird '9' ausgegeben.
Nun meine Frage wie kann ich diesen Fehler beheben?
Danke im Voraus.
LG, Felix -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich verstehe das Problem nicht!
Wenn man den Chat gleichzeitig als Client und als Server verwenden kann, wäre es von Vorteil, mehrere Winsock Steuerelemente darauf zu ziehen ;). Auf meiner löblichen Homepage gibt's dazu ein gaaanz Simples programm, welches lediglich eine Text Nachricht verschickt. Dieses Könnte man dahinngehend aufbohren, in dem man den Client teil auch in den server kopiert & umgekert, (man muss natürlich Ports & CO ändern). Wozu sollten die States dienen?
Private Sub ws_close()
Form1.Visible = True
'wenn verbindung beendet, dann Prog.fenster wieder sichtbar
End Sub
Mit WS_Close wird das nach beendetet verbindung ausgeführt.
In die Private Sub Form_Load()
ws.LocalPort = 42222
ws.Close
ws.Listen
' Konfiguration für Winsock
End Sub
kommt das, um das "Warten" auf einem garantier freien Port (ws.Close) zu ermöglichen. Merke: ws = hier name fürs steuerelement. Ich hoffe es konnte helfen. Ansonsten mal den Beispiel-Code auf meiner Website ansehen ;) -
Jor ich sollte es mit 2 Winsock Controls probieren.
Mit dem Befehl winsock.state kann man den Aktuellen Status den Winsock Elemtes erfahren gibt Werte zwischen 1 und 9 Zurück die alle für eine Bestimmte Aktion stehen.
Zitat
0 Der Socket ist geschlossen
1 Der Socket ist geöffnet
2 Der Socket ist empfangsbereit
3 Die Verbindung wird aufgebaut
4 Der Remote-Host-Name wird in eine IP-Adresse umgewandelt
5 Der Remote-Host-Name wurde in eine IP-Adresse umgewandelt
6 Der Socket verbindet sich zu dem Remote
7 Der Socket hat sich zu dem Remote verbunden
8 Der Remote hat die Verbindung getrennt
9 Ein Fehler ist aufgetreten
Also THX.
LG, Felix
Das Problem liegt auch bei deinem Beispiel vor,
Wenn die Verbindung einmal abgebrochen wurde, kann man nicht erneut zum Server Connecten sondern muss den Server neu starten. Und um das geht es mir ;)
LG, Felix -
Asooo
Dann muss lediglich der Inhalt der Form-Load nochmals ausgeführt werden. Es muss der Port getrennt werden, und dann wieder Verbunden
Im prinziep also beim server (aus meinem Beispiel)
ws.Close
ws.Listen
In den
Private Sub ws_close()
Form1.Visible = True
'wenn verbindung beendet, dann Prog.fenster wieder sichtbar
End Sub
rein =
Private Sub ws_close()
ws.Close (wenn nicht schon getan ;) )
ws.Listen
End Sub
Ein Problem könnte nur ungewolltes beenden, also Timeout oder so sein ;).
Edit: Solche funktionen könnte ich in nem Programm von mir vielleicht auch gebrauchen, aber sobald der PC hinter nem Router sitzt, funzt die direktverbindung nurnoch mit speziellen einstellungen am router (port-weiterleitung & CO) daher bräuchte ich eine art "reverse-Connection", am besten über nen server, wo die clients ihre nachrichten speichern, und gleichzeitig abrufen, also übern simples php-script vielleicht? ^^ .
Beitrag geändert: 15.7.2007 13:08:02 von erasmuz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage