Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Di 16.05.06 18:45 
Hallo, ich habe mir eine PCControl Software erstellt, mit der ich einen PC im Netzwerk per Remote
Runterfahre in Ruhezustand und in StandBy versetzen kann.

Also eine Client und eine Server Anwendung, es funktioniert auch soweit alles, nur ich habe beim
Server eine zurückmeldung mit

ausblenden Delphi-Quelltext
1:
WriteLn('Alles klar, Befehl empfangen, wird ausgeführt');					


und beim Clienten

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Connect;
begin
   try
    tcpClient.Connect;
   except
     MessageBox(.., 'Konnte nicht connecten',..); // es wird immer dies ausgeführt obwohl der Server auf Commando reagiert
   end;
end;

procedure OnConnect(..)
begin
 SendCmd(..) 
 MessageBox(.., tcpClient.Socket.ReadLn, ); // <-- wird nie ausgeführt/ausgegeben 
end;



Also die MessageBox in OnConnect wird nie angezeigt aber in Connect wird immer der except Block ausgeführt obwohl
Commando erfolgreich gesendet und ausgeführt wird.

Wieso wird exception ausgelöst?
skycomnd
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 17.05.06 14:22 
hallo,
was passiert ohne die msgbox?

mach dein "SendCmd" nach dem connect und nicht während des connects.

gruss
pp
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 17.05.06 14:46 
user profile iconskycomnd hat folgendes geschrieben:
hallo,
was passiert ohne die msgbox?

mach dein "SendCmd" nach dem connect und nicht während des connects.

gruss
pp


Ich habe jetzt mal anstatt SendCmd - WriteLn genommen und direkt danach ReadLn das funktioniert
soweit gut, nur manchmal kamm es wieder.

Aber vieleicht wird ja wegen einem anderen Fehler das exception ausgelöst, ich meine es gibt
ja allein beim Connecten verschiedene Formen von Fehlern.

Ich muß mich mit exceptions mehr befassen, ich habe mal den genauen Grund in einer MessageBox
ausgeben lassen, weiß aber nicht wie das ging, das war bei Java anders.

Aber gibts eine andere procedure außer OnConnect ? Ich denke doch dass da schon Connected ist.
Chughallen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21



BeitragVerfasst: Mi 17.05.06 15:17 
Du solltest deine Exception auf jeden Fall mal behandeln, also nicht nur eine Message Box ausgeben, sondern auch die Fehlermeldung, welche in der eigentlichen Exception steht.
TCPconnect kann etliche Excpetions werfen, wie z.B. Port oder IP nicht gesetzt, connection refused, timeout usw.
Die MessageBox ist vollkommen überflüssig, weil fängst du die Exception nicht expliziet ab, dann macht das die Application und die macht genau das, sie gibt dir eine Message Box mit dem Fehler.
Abgesehen davon, benutzt Indy blocking Sockets, deine eigene Prozedur 'Connect' geht also sowieso erst weiter, wenn die Funktion tcpClient.Connect zurückkehrt.

Du kannst also dannach einfach ein:
if tcpClient.Connected = true then
...
machen.