Autor Beitrag
noreux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 13.01.08 04:29 
Moin,

Habe ein Server-Client Tool geschrieben, welches auch wunderbar funktioniert. ich bin nicht der beste programmierer, darum sind nicht alle fehler perfekt abgefangen, aber es reicht mir so wie es jetzt ist. nur eine fehlermeldung macht mir gerade kopfschmerzen, sie wird von der Client anwendung ausgelöst wenn unerwartet die verbindung getrennt wird. es ist ne messagebox eben vom typ fehlermeldung, also links das typische rote kreuz. titel der box ist "servertool" welches auch der titel meines tools ist. inhalt ist "Die Verbindung wurde erfolgreich geschlossen". Sobald diese meldung kommt, was zwar relativ selten ist, aber zu oft um damit leben zu können. ich will gar nicht erst suchen wo ich einstellen kann dass diese meldung unterbunden wird, mir reicht es wenn meine anwendung die meldung "wegklickt". Hat mir da jemand irgendn code mit dem ich so ne meldung weghauen kann?

mfg

Nor
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 13.01.08 05:31 
noreux hat folgendes geschrieben:
Ich will gar nicht erst suchen wo ich einstellen kann dass diese meldung unterbunden wird, mir reicht es wenn meine anwendung die meldung "wegklickt".

Halte ich für eine schlechte Lösung.

noreux hat folgendes geschrieben:
nur eine fehlermeldung macht mir gerade kopfschmerzen, sie wird von der Client anwendung ausgelöst wenn unerwartet die verbindung getrennt wird. es ist ne messagebox eben vom typ fehlermeldung, also links das typische rote kreuz. titel der box ist "servertool" welches auch der titel meines tools ist. inhalt ist "Die Verbindung wurde erfolgreich geschlossen".

Wäre jetzt gut zu wissen, welche Komponente/Unit du benutzt und ob die Sources mit dabei sind. Weil ein einfaches // könnte dein Problem u.U. schon lösen...

Gruß

Calculon
--

_________________
Hallo Mutti
noreux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 13.01.08 06:07 
hi!
danke für die schnell antwort so früh am morgen ;)

das problem ist dass mein ganzer source mittlerweile schon so umfangreich ist, dass ich selbst so langsam den Überblick verliere...

also es handelt sich um die idTCPClient von Indy. ein anderes tool hat entsprechend den tcp server dazu, die kommunikation funktioniert einwandfrei, nur manchmal kommt eben diese fehlermeldung, und dann hat der client auch keine daten empfangen. eigentlich ist das kein problem, meine software probiert immer und immer wieder neu zu verbinden und daten zu empfangen, normalerweise funktioniert es dann beim zweiten anlauf schon. wenn die meldung aber kommt, is das ganze programm erstmal auf pause, bis ich die meldung wegklicke.

hier mal eine vereinfachte version von meinem quelltext...irgendwo in der prozedur wird manchmal der fehler produziert. client teilt dem server name, version etc mit und empfängt dann nacheinander strings bis der server das stop sendet.

ausblenden volle Höhe 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:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
var
s: String;

begin

  s := IdTCPClient1.ReadLn;


  if AnsiSameText(s, 'Clientname?') then
    begin
       IdTCPClient1.WriteLn('client: ' + clientnamefeld.text);
       s := IdTCPClient1.ReadLn;
      if AnsiSameText(s, 'Hallo ' + clientnamefeld.text + '. Version?') then
         begin
          idtcpclient1.WriteLn('version: ' + IntToStr(version));
         end;

        s := IdTCPClient1.ReadLn;
       if AnsiSameText(s, 'Deine Version ist ' + IntToStr(version) + '. Welches Modul willst du laden?') then
         begin
            idtcpclient1.WriteLn('modul: ' + modulname);
         end;

        s := IdTCPClient1.ReadLn;

                if pos(s, 'newversion:') = 0 then
                    begin
                    speed:=StrtoInt(copy(s, 10, length(s)));
                    setspeed('nil');
                    end;

        s := IdTCPClient1.ReadLn;


                    if AnsiSameText(s, 'start') then
                       begin

                           while s<>'stop' do
                              begin
                                s := IdTCPClient1.ReadLn;

                                  if AnsiSameText(s, 'stop') then
                                     begin
                                     idtcpclient1.Disconnect;
                                     cache.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\' + modulname + '.cache');
                                     label13.Caption:='Cached: ' + IntToStr(cache.count);
                                     label16.Caption:='Last Load: ' + Copy(TimeToStr(now), 0, 5);


                                     clientread.Enabled:=false;
                                     end

                                 else
                                   begin

                                     if AnsiSameText(s, 'stopcomplete') then
                                       begin
                                         stopprocess('stop');
                                       end
                                       else  cache.Add(s);
                                   end;

                                     cache.SaveToFile(ExtractFilePath(ParamStr(0)) + 'temp\' + modulname + '.cache');
                                     label13.Caption:='Cached: ' + IntToStr(cache.count);

                            end;
                          inprogress:=false;
                    end;
       end;
    end;



ich weiß das der quelltext ansich nicht gerade der performanteste ist und ich sicher an vielen ecken und enden noch fehler abfangen müsste, aber die software läuft eigentlich problemlos. Ich muss nur die meldung loswerden, entweder von anfang an unterdrücken/abfangen oder eben wegdrücken/abschießen wenn sie kommt, da sie für den problemlosen ablauf des tools nicht relevant ist.

Bin für jeden Tipp dankbar!

gruß
NoR
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 13.01.08 06:34 
Also, da ich nicht weiß' an welcher Stelle das auftritt, mal ein allg. Hinweis. Mit den Indys -zumindest ab Version 9, die ich benutze- kannst du folgenden Code ausführen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.IdTCPClient1Connected(Sender: TObject); 
var 
s: String; 
begin 
  try
    s := IdTCPClient1.ReadLn; 
  except
    on E: Exception do exit;
    // oder was auch immer gemacht werden soll
  end;
    if AnsiSameText(s, 'Clientname?') then 
      begin 
        try
          IdTCPClient1.WriteLn('client: ' + clientnamefeld.text); 
        except
          on E: Exception do exit;
          // usw. bei jeder Benutzung
        end;

Ich gehe jetzt mal schlafen, hoffe es funktioniert ;-)

Weisheit von mir @all: Prüfungszeit = Scheisszeit

Gruß

Calculon
--

_________________
Hallo Mutti
noreux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 13.01.08 10:44 
danke hätt ich eigentlich auch selbst drauf kommen können.... Seit ich es geändert habe kam keine meldung mehr, schätze mal das hat geholfen....

thx!

gruß
NoR