Autor Beitrag
p_h_i_l
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 20.11.07 19:02 
Hallo Zusammen,
habe nun angefangen mit einer TClientSocket. Bin absoluter Anfänger und kenn mich nicht aus, aber muss/soll/darf was für meinen Chef programmieren :-)
Wenn ich den applikation Server starte (dauert 15-35 sek), soll immer wieder durch eine schleife geprüft werden ob port "8090"(auf dem läuft der Server) belegt ist. Wenn belegt, dann ist applikationServer gestartet.
Nun wenn der port belegt ist soll ein BatchFiles aufgerufen werden. Dieses Batchfile hat etwas mit dem Server zu tun und darf nur gestartet werden wenn der ApplikationServer "Jboss" gestartet ist! darum will ich den Port abprüfen.

hab gelesen das geht mit so einer Schnittstelle TClientSocket.

bisher habe ich es so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
//Prüfen ob JBOSS gestartet ist
serverstarted := false;

ClientSocket1.Host := 'localhost';
ClientSocket1.Port := 8090;
ClientSocket1.Open;


while serverstarted = false do begin

try
ClientSocket1.Active := True;


serverstarted := true;
except

sleep(1000);
end;

if serverstarted = true then begin
SetCurrentDir(dir);
ShellExecute(Handle, 'open', tmpPcharBrowser, nilnil, SW_SHOWNORMAL);
Application.Terminate;

end;

in meiner Schleife soll er immer wieder in die Exception laufen wenn ClientSocket1.active nicht true ist. wenn True dann die Variable serverstarted auf true setzen und in der darauf folgenden if-Bedingung das Batch.File ausführen.
Doch irgendwie läuft er immer über dieses Statement und springt nicht in die Exception. mache ich etwas falsch.? funktioniert dieses ClientSocket1.aktive := True nicht? muss ich etwas anderes versuchen?
oder fehlt mir grundsätzlich etwas....
Mache ich hier etwas grundlegendes falsch?

Gruß.und THX im Voraus
Philipp

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 20.11.07 19:17 
Moin und :welcome: im Forum!

user profile iconp_h_i_l hat folgendes geschrieben:
Doch irgendwie läuft er immer über dieses Statement und springt nicht in die Exception. mache ich etwas falsch.? funktioniert dieses ClientSocket1.aktive := True nicht? [...] Mache ich hier etwas grundlegendes falsch?
Ja, du verwendest einen non-blocking-socket nicht wie vorgesehen ereignisorientiert. ;) Deine Vorgehensweise klappt nur mit blocking-socket-calls. (wobei man über den Code noch diskutieren könnte... :?)

user profile iconp_h_i_l hat folgendes geschrieben:
muss ich etwas anderes versuchen?
Da du einen Port auf der lokalen Maschine prüfen willst, würde ich einfach netstat -a z.B. hiermit ausführen und schauen, ob der Port in der Liste auftaucht, sicherheitshalber noch ein paar Sekunden warten und dann deine Batchdatei ausführen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
p_h_i_l Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 21.11.07 10:17 
Moin,
das man über den code diskutieren würde weiß ich :-)
ich muss es so ausdrücken, ich frickle hier einfach aus code Beispielen mir immer was zusammen und hoffe das es funktioniert :-)

aber solang es funktioniert ist mir egal wie der code aussieht :-)

naja bin sehr überrascht über die schnelle Antwort danke!
wie sieht den das ganze ereignisorientiert aus? habe ich ein falsches socket genutzt oder ist nur dieser ClientSocket.active := true falsch? versteh nämlich nur Bahnhof *G*


ah ja und die zweite Variante gefällt mir ned so wie die erste, würde gern bei der ersten bleiben... kannst mir noch kurz helfen wie ich das umsetzen soll? also was genau der fehler ist?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 21.11.07 13:42 
Moin!

user profile iconp_h_i_l hat folgendes geschrieben:
ich muss es so ausdrücken, ich frickle hier einfach aus code Beispielen mir immer was zusammen und hoffe das es funktioniert :-)
aber solang es funktioniert ist mir egal wie der code aussieht :-)
:|

user profile iconp_h_i_l hat folgendes geschrieben:
wie sieht den das ganze ereignisorientiert aus?
Das ist hier einfach der falsche Ansatz, egal wie es aussieht. :nixweiss:

user profile iconp_h_i_l hat folgendes geschrieben:
ah ja und die zweite Variante gefällt mir ned so wie die erste, würde gern bei der ersten bleiben... kannst mir noch kurz helfen wie ich das umsetzen soll?
Nein. :? Probier´s mal so, wie hier vorgeschlagen, der Code ist zwar etwas merkwürdig hingeklatscht, sollte aber das gewünschte Resultat liefern. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
p_h_i_l Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 22.11.07 09:54 
so, habe den code jetzt so gelassen wie er war.
es gibt da eine Einstellung beim TClientSocket auf der man umswitchen kann von Standardmässig non-blocking auf blocking.
jetzt funktionierts....

Gruß,
Phil
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 22.11.07 14:16 
Moin!

user profile iconp_h_i_l hat folgendes geschrieben:
so, habe den code jetzt so gelassen wie er war.
es gibt da eine Einstellung beim TClientSocket auf der man umswitchen kann von Standardmässig non-blocking auf blocking.
jetzt funktionierts....
Es stürtzt nur nicht sofort ab, mehr wird man kaum sagen können... ;)

Ich rate trotzdem davon ab, den Code aus dem ersten Beitrag zu verwenden, er ist fehlerhaft.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.