Autor Beitrag
Marco D.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: 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.

ausblenden 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
  //so lange versuchen eine Verbindung aufzubauen, bis sie steht
  repeat
  clientsocket.Open;
  clientsocket.close;
  until clientsocket.Socket.Connected=true; //also ich glaub das liegt hieran
                                            //ich will nur abfragen, ob eine Verbindung steht oder nicht
end
else begin
  //wenn der Verbindungsversuch abgebrochen werden soll
  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:

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 04.11.05 17:43 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin   
  //so lange versuchen eine Verbindung aufzubauen, bis sie steht   
  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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2750

Windows Vista
Delphi 7, Delphi 2005 PE, PHP 4 + 5 (Notepad++), Java (Eclipse), XML, XML Schema, ABAP, ABAP OO
BeitragVerfasst: Fr 04.11.05 18:11 
Also das funzt irgendwie nicht

ausblenden 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
  //so lange versuchen eine Verbindung aufzubauen, bis sie steht
  while true do begin
  sleep(200);
    clientsocket.Open;
    if clientsocket.Socket.Connected then break;
  end;
end
else begin
  //wenn der Verbindungsversuch abgebrochen werden soll
  clientsocket.Close;
end;
end;


Der verbinder sich noch nicht mal so.

würde nicht auch folgendes gehen?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 04.11.05 18:28 
dann halt
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin   
  //so lange versuchen eine Verbindung aufzubauen, bis sie steht   
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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