Autor |
Beitrag |
Marco D.
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: Fr 04.11.05 17:39
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 
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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 |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Marco D. 
      
Beiträge: 2750
Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
|
Verfasst: 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,,,
_________________ Pascal keeps your hand tied. C gives you enough rope to hang yourself. C++ gives you enough rope to shoot yourself in the foot
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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 |
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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  , 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
|
|
|