[Gelöst] ClientSocket neu verbinden - wie?
-
Hi,
Wie verbinde ich den ClientSocket neu?
Ich habs mit ClientSocket1->Active = false; (beim onDisconnect) und anschließend bei dem neuen host wieder ClientSocket1->Active = true; gesetzt, funktioniert aber nicht. (kein fehler, aber es verbindet nimmer.)
Ich hab schon probiert, dass wenn es neu verbinden soll, vorher noch den Socket "schließe" und "öffnet"->
ClientSocket1->Close();
ClientSocket1->Open();
, funktioniert aber auch nicht (wieder kein fehler, aber verbinden tut's auch nicht)

mfG CppCluster
// EDIT: Thread kann gelöscht werden, Problem wurde gefunden ;).
-
Hallo cppcluster,
du solltest auf jeden Fall nur ClientSocket1->Close(); ClientSocket1->Open(); verwenden. Die Befehle beeinflussen auch ClientSocket1->Active.Was ist denn mit dem SeverSocket. Der sollte nach einer Verbindungsunterbrechung in den Zustand listen gehen sonst bekommst du nie eine Verbindung mit dem Client.
Viel Erfolg
evi48
-
evi48 schrieb:
Hallo cppcluster,
du solltest auf jeden Fall nur ClientSocket1->Close(); ClientSocket1->Open(); verwenden. Die Befehle beeinflussen auch ClientSocket1->Active.Habe ich gerade probiert, bei jedem neuem Verbinden vorher
`ClientSocket1->Close();ClientSocket1->Open();` geschrieben, aber das Programm verbindet auch nicht...
evi48 schrieb:
Was ist denn mit dem SeverSocket. Der sollte nach einer Verbindungsunterbrechung in den Zustand listen gehen sonst bekommst du nie eine Verbindung mit dem Client.
Das Programm verbindet sich mit irgendnem Server im Web und lädt datei(en) herunter, also kann ich da nichts machen
.P.S.: Hatte massive probs mit win, wollte dann auch win in linux emulieren (das hat gedauert
), hat aber nicht wirklich funktioniert, darum wieder win..So Long..
CppCluster
-
Guten Morgen cppcluster,
ich gehe da von aus daß dir der Name oder die IP-Adresse des Servers bekannt sind sonst hast du glaube ich schlechte Karten.Bei meiner Applikation ist mir die IP-Adresse bekannt und der Socket wird bei mir so initialisiert:
ClientSocket->Address = RemoteIP; // setzen ClientSocket->Port = RemotePort; // setzenZu
__property System::AnsiString Host = {read=FHost, write=SetHost};ist in der Hilfe zu finden:
"Host ist ein String, der den Domänennamen und den Dienst eines bestimmten Systems enthält, wie z.B.:
Bei Client-Sockets setzen Sie Host auf das System, zu dem der Socket eine Verbindung herstellen soll. Wenn der Socket eine Verbindung öffnet, sucht er mit Hilfe des Wertes von Host nach der IP-Adresse für den Server-Socket.
Bestimmte Server ändern die System- oder IP-Adresse, die mit einem bestimmten Host-Namen verbunden ist. Wenn ein Host-Name verwendet wird, kann der Client-Socket den abstrakten Host-Standort auch dann finden, wenn sich die IP-Adresse für den Host-Namen geändert hat.
Wenn für die Eigenschaft Host ein Wert festgelegt ist, hat dieser bei der Suche nach der Server-Adresse Vorrang vor der Eigenschaft Address.
Hinweis
Der Versuch, Host bei einer geöffneten Verbindung zu ändern, führt zu einer ESocketError-Exception."
Ob dir in diesem Zusammenhang "dyndns.org" weiterhilft weiß ich nicht.
Einen erfogreichen sonnigen Tag
evi48
-
evi48 schrieb:
Guten Morgen cppcluster,
ich gehe da von aus daß dir der Name oder die IP-Adresse des Servers bekannt sind sonst hast du glaube ich schlechte Karten.Bei meiner Applikation ist mir die IP-Adresse bekannt und der Socket wird bei mir so initialisiert:
ClientSocket->Address = RemoteIP; // setzen ClientSocket->Port = RemotePort; // setzenSo habe ich es schon probiert.
evi48 schrieb:
Ob dir in diesem Zusammenhang "dyndns.org" weiterhilft weiß ich nicht.
nein

evi48 schrieb:
Einen erfogreichen sonnigen Tag
evi48danke

So, hab das (dumme...) Problem gelöst: hab nur
ClientSocket1->Close();geschrieben, und dann nen timer gestartet, der nach 1sek
ClientSocket1->Open();aufruft. Anscheinend braucht der Server / der PC n bisschen Zeit zwischen Close() / Open().
//-> Thread kann gelöscht werden.
mfG CppCluster