Autor Beitrag
professorbass
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 10:57 
He Leute ich will euch hier nicht auf den Wecker fallen *gg* mit meinen fragen.

Aber was ist hier falsch im Code
was mache ich falsch
wen ich im Browser localhost eingebe lädt es stundenlang und es passiert nix.
Ich glaube das hat was mit RecvBufferSize zu tun???.
Und wen das so ist was wäre richtig???
oder ist was anderes falsch?

könnt ihr mir da helfen?

THX

ausblenden volle Höhe 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:
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:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdContext, StdCtrls, IdBaseComponent, IdComponent, IdCustomTCPServer,
  IdTCPServer;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure IdTCPServer1Execute(AContext: TIdContext);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

    Uses IdTCPClient;  // This line includes the correct component

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
       IdTCPServer1.Active := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
         IdTCPServer1.Active := False;
end;

    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    Var
       Cli        : TIdTCPClient;
       Len        : Cardinal;
       Data       : String;
    begin
         Try
            Cli := NIL;
            Try
               { Create & Connect to Server }
               Cli := TIdTCPClient.Create( NIL );
               Cli.Host := 'tue-hauptclan.eu';
               Cli.Port := 80;
               { Connect to the remote server }
               Cli.Connect;
               { Read/Write loop }
               Repeat
                  { Read data from Client }
                  If AContext.Connection.Socket.RecvBufferSize>0 then
                  Begin
                       Len := AContext.Connection.Socket.RecvBufferSize;
                       Data := AContext.Connection.Socket.ReadString(Len);
                       { Write it to the Server }
                       Cli.Socket.Write( Data );
                  End;
                  { Read data from Server }
                  If Cli.Socket.RecvBufferSize>0 then
                  Begin
                       Len := Cli.Socket.RecvBufferSize;
                       Data := Cli.Socket.ReadString(Len);
                       { Write it to the Server }
                       AContext.Connection.Socket.Write( Data );
                  End;
                  { Check for Disconnects }
                  Cli.Socket.CheckForDisconnect(False);
                  Cli.CheckForGracefulDisconnect(False);
                  AContext.Connection.Socket.CheckForDisconnect(False);
                  AContext.Connection.CheckForGracefulDisconnect(False);
                  { Release system slizes }
                  SleepEx(1,True);
               Until (NOT AContext.Connection.Connected) OR (NOT Cli.Connected);
            Finally
               If Assigned(Cli) then
               Begin
                    Cli.Disconnect;
                    Cli.Free
               End;
               { Disconnect real client }
               AContext.Connection.Disconnect;
            End;
         Except End;
    end;

end.
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 09.08.10 14:32 
hast du das denn schonmal debuggt?
Was wird aufgerufen, wo hakt es?
Etwas Eigeninitiative bitte.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 14:36 
Ich frag mal vorsichtig nach.
Du weisst, das localhost, entweder ein VM ist oder ein 2. Rechner, der darauf wartet das Du dich mit ihm verbindest. Also die Anfrage gestartet hat, das Du dich mit ihm verbinden sollst.
Müsstest Du evtl den Code auch noch posten? Denn das Problem kann ja auch da sein!
Denn auf Dich selbst wirst Du es ja nicht versuchen! Oder evtl IP angeben.
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 14:43 
Es war dieses Tutorial was ich da gemacht habe.
Es ist leider veraltet so das ich den Code etwas verändern musste für indy10
dort gibt es kein 2. Code ???


www.delphi3000.com/a...article_3381.asp?SK=
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 09.08.10 14:43 
BTW.: Du weißt das keine Fehlermeldung kommen würde selbst wenn ein Fehler auftritt? Grund ist das du komplett alle Fehler unbehandelt mit der leeren Except-Anweisung (ev. sogar mit der Finally) abfängst.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 15:12 
Schau was dir user profile iconelundril noch geschrieben hat. Ne Fehlermeldung kannst du natürlich nicht bekommen. Steht aber auch in diesem lnk drin, das Du dafür was selber machen must!

dort wird aber auch mit Thread gearbeitet so wie ich es sehe!
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 15:25 
Jaich habe nun

Except
ShowMessage('Fehler');
end;

eingetragen
richtig jetzt kommt ein Fehler.

@ALF ja das ist mir klar das es dann weiterleitet zu der Domain wo ich eingetragen habe.
aber das macht's nicht Browser bleibt weis Fehler kommt vom Programm und der Browser wartet auf Antwort vom Server.
mit aTread geht es nichtmehr mit der indy Version 10 haben die geändert.
da habe ich nachgeforscht im internet und rausgefunden
bei version 10 von indy geht das so nicht mehr.
AThread.Connection.CurrentReadBufferSize
darum meine Frage ja warum das so ist,
worann es ligen könnte
habe es ja soweit edditiert das es mit der version 10 gehen sollte.


@Flamefire ich habe den Debugger laufenlassen kommt
thread start
und ohne debug infos.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 15:34 
Setzt mal ein Breakpoint bei Zeile 66 ob da was kommt und steppe dann durch ob DATA überhaupt was drin hat!

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 09.08.10 15:39 
probier mal lieber folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
except
  on E: Exception do Showmessage(E.Message);
end;


Damit kann man ev. mehr anfangen als mit 'Fehler'.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 15:57 
ausblenden Delphi-Quelltext
1:
2:
3:
except
  on E: Exception do Showmessage(E.Message);
end;


Hat nicht wirklich viel gebracht *gg*
Aber guter tip. THX
es kommt kein Fehler mehr
Browser sagt warten auf Host, und er wartet und wartet *gg*
hab gestern die ganze Nacht gesucht ob es eventuell noch n anderes Tutorial gibt das ich anhand dessen vielleicht den Fehler finde aber leider nix. naja mal sehen vielleicht krieg ich es ja noch irgend wie hin mit eurer Hilfe.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Nachtrag:
Doch nach Langerzeit kommt der Fehler: Connection Closed Gracefully

"CONNECTION CLOSED GRACEFULLY" ist wenn die Gegenstelle unerwartet die Verbindung beendet. In diesem Fall könnte es sein, dass man sich mit einer dynamischen IP-Adresse (= Einwahl-IP-Adresse = zugewiesende IP-Adresse des Internetproviders) mit einem Server verbindet und der Server das nicht mag. Der Server trennt einfach die Verbindung. Alternative wäre der Server erlaubt nur die Verbindung (und Kommunikation) mit bestimmten IP-Adressen, alle anderen dürfen sich zwar verbinden werden aber sofort wieder getrennt.

Danke nochmals für eure Hilfe echt geil von euch
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 16:09 
Nimm doch mal ne andere Adresse google oder so!
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 16:38 
Ne weder denen ihre eigne von dem tutorial geht.
noch Google oder meine eigne Domains.

Schade Funktioniert nicht ich versteh au die Fehlermeldung nicht die iss doch bisschen komisch oder ??
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 09.08.10 16:47 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Setzt mal ein Breakpoint bei Zeile 66 ob da was kommt und steppe dann durch ob DATA überhaupt was drin hat!

Gruss Alf


@professorbass: Hast du das gemacht, nachdem es dir schon der 2. gesagt hat? >.<
Ist doch wurst ob die Adresse geht. Wichtig ist erstmal, dass es beim Server ankommt, den du geschrieben hast.
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 16:48 
Also aufhängen tut sich das ganze bei
ausblenden Delphi-Quelltext
1:
2:
Len := AContext.Connection.Socket.RecvBufferSize;//<--- len wird gesetzt
Data := AContext.Connection.Socket.ReadString(Len);//<----hier bleibt er hängen!!!


Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 17:06 
Stimmt

Quelltexthaltepunkt bei $004E4835: \Unit1.pas Zeile 63. Prozess Project1.exe (17032)

dan ist warscheinlich RecvBufferSize eben doch falsch...


E2171 Auf Variable 'Len' kann wegen Optimierung nicht zugegriffen werden
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 09.08.10 17:19 
mh.... wenn ich weiter steppe hängt er sich in der Unit IDStackWindows Zeile 834 bei der
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
class function TIdSocketListWindows.FDSelect(AReadSet, AWriteSet,
 AExceptSet: PFDSet; const ATimeout: Integer): Boolean;
var
  LResult: Integer;
  LTime: TTimeVal;
begin
  if ATimeout = IdTimeoutInfinite then begin
    LResult := IdWinsock2.Select(0, AReadSet, AWriteSet, AExceptSet, nil);//<--- hier passiert nichts mehr
  end else begin
    LTime.tv_sec := ATimeout div 1000;
    LTime.tv_usec := (ATimeout mod 1000) * 1000;
    LResult := IdWinsock2.Select(0, AReadSet, AWriteSet, AExceptSet, @LTime);
  end;
  //TODO: Remove this cast
  Result := (GStack as TIdStackBSDBase).CheckForSocketError(LResult) > 0;
end;
Bis dahin werden aber Daten gelesen! Denn der "Puffer" der noch zwischendurch erstellt wird, wird mit Daten gefüllt! 1X, beim 2ten durchlauf bleibt er an der obigen Stelle hängen

mh.....
Edit:
das ist, was der Server im Puffer hat:
Zitat:

GET / HTTP/1.1
Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Accept-Language: de
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive
Cookie: pkSITE=a%3A1%3A%7Bi%3A0%3Bi%3A1266620400%3B%7D

Es ist die anfrage vom IE "localhost", wenn ich es richtig sehe.
Beim Versuch den Clienten zuerst auszulesen, hängt sich der Client auch an dieser Stelle auf, holt aber noch nicht mal Daten von der angegebenen Adresse!

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 09.08.10 21:05 
Gut super...
da sind wir schon bissel weiter..
Was gibt es den für bessere Alternativen für ReadString
wens überhaupt eine gibt...???

ich mein ist ja kein string is ja ein Cardinal dessen inhald zu einem string werden soll richtig????

Dumme Fragen gibts ned
bin Amfänger!!!
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Mo 09.08.10 21:16 
häng mal bitte das projekt an.
dann guck ich mal...
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Di 10.08.10 00:00 
Also, das auslesen der Daten, darf als Ergebnis, nur die tatsächliche länge haben. In diesem Fall sind es 502 bytes. Dann steht das drin, was oben bei mir als Zitat markiert ist.
ausblenden Delphi-Quelltext
1:
Data := AContext.Connection.Socket.ReadString(502);					

mit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 
If AContext.Connection.Socket.RecvBufferSize>0 then
Begin
    Len := AContext.Connection.Socket.RecvBufferSize;
    while len>0 do
    begin
       if length(AContext.Connection.Socket.ReadLn)<>0 then
       begin
           Data := Data + AContext.Connection.Socket.ReadLn;
           dec(len);
       end
       else break;
   end;
   { Write it to the Server }
   Cli.Socket.Write( Data);
End;
wird Data auch gefüllt!
Nun folgt auch eine Anforderung zur Adresse, laut log von Apache!
Wie nun aber die Daten von der Adresse zurückkommen??? nix gefunden!

user profile iconFlamefire eigentlich nur C&P von user profile iconprofessorbass seinem 1.Post
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
professorbass Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Di 10.08.10 09:35 
ja ich probiere Delphi zu lernen und so mache ich tutorial für tutorial aus dem netz und Google hilft mir.
jedes tutorial wo interessant aus siht mache ich.
Aber ich denke es ist dann doch zu Schwer.
Mit php kahm ich gut zurecht auf diese Weise hier portal.tue-hauptclan.eu das ist in mache warte auf das design wo ein kumpel macht
solang ist dort pause... fehlen noch phar funktionen abersowet ists schon fertig mit admin bereich wird ein schönes cms.
da dacht ich mir soooo viel schwererer kann das doch nicht sein. oder verwirrt mich php den da sind phaar sachen gleich wie z.b. die if abfrage fast identisch.
und da wir hier die Software rumfahren haben dacht ich mir das könnte lustig werden ich
mach noch ein tutorial wen ich das hier nicht Klappen sollte wen das dann auch nicht klappt lasse Ichs
wäre schon toll das zu können.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

@ ALF der weg zurück ist ja eigentlich...

na klar der müsste den selben fehler haben denn der funktioniert ja fast gleich wen ichs habe poste ich den code.