Entwickler-Ecke
Internet / Netzwerk - Clientsocket soll ständig versuchen, zu verbinden
Marco D. - Fr 04.11.05 17:39
Titel: Clientsocket soll ständig versuchen, zu verbinden
Also mein Programm baut auf einer Client-Server-Verbindung auf. Wenn aber der Clientsocket zuerst aktiviert ist und dann der Serversocket, dann wird keine Verbindung aufgebaut. Andersrum gehts natürlich. Nun dachte ich mir, bau ich eine Prozedur, bei der der Clientsocket ständig versucht, seinen Server zu finden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TryToConnect(clientsocket : Tclientsocket; StartTrying : boolean); begin if StartTrying=true then begin repeat clientsocket.Open; clientsocket.close; until clientsocket.Socket.Connected=true; end else begin clientsocket.Close; end; end; |
Also das klappt nicht, ich glaube auch zu wissen wo, die mögliche Fehlerquelle habe ich im Quelltext kenntlich gemacht.
Hoffe auf Lösungen :flehan:
retnyg - Fr 04.11.05 17:43
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| begin while true do begin clientsocket.Open; if clientsocket.Socket.Connected then break; end; end |
Marco D. - Fr 04.11.05 18:11
Also das funzt irgendwie nicht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TryToConnect(clientsocket : Tclientsocket; StartTrying : boolean); begin if StartTrying=true then begin while true do begin sleep(200); clientsocket.Open; if clientsocket.Socket.Connected then break; end; end else begin clientsocket.Close; end; end; |
Der verbinder sich noch nicht mal so.
würde nicht auch folgendes gehen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ClientSocket2Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if errorcode<>0 then begin errorcode:=0; clientsocket2.Active:=false; application.ProcessMessages; sleep(2000); clientsocket2.Active:=true; end; end; |
Oder hat einer von euch ne ganz andere methode? ohne gehts bloß nicht,,,
retnyg - Fr 04.11.05 18:28
dann halt
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| begin while true do begin clientsocket.Open; if clientsocket.Socket.Connected then break; clientsocket.Close; end; end |
Narses - So 06.11.05 02:00
Moin!
Zunächstmal halte ich das Vorhaben für kompletten Unfug; aber da es ja üblicherweise keinen Sinn macht, darauf hinzuweisen :roll:, hier ein Lösungsvorschlag:
Nach einem ClientSocket1.Open darf die nächste Reaktion erst entweder im .OnConnect oder im .OnError erfolgen, direkt in einer Schleife am Clientsocket rumzufummeln, kann nicht gehen. Die WSA brauchst erstmal einen Moment, bis die TCP-Socketanfrage einen Fehler resp. einen Connect meldet (das ganze läuft ja idR asynchron!).
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!