AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Vernünftig mit Indy9 TCPClient empfangen

Vernünftig mit Indy9 TCPClient empfangen

Ein Thema von Die Muhkuh · begonnen am 11. Dez 2005 · letzter Beitrag vom 12. Dez 2005
Antwort Antwort
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 18:34
Hallo Jungs, Mädels, Fische, Katzen, Vulkanier, Haie, wasweisichnoch,

ich hätte mal ne Frage zu der Komponenten TIdTCPClient von Indy9 .

Bei der Server-Komponente (TIdTCPServer) gibt es ja das OnExecute, welches ich bei dem Client sehr vermisse.
Beim Client muss man ja ein Timer mitlaufen lassen und alle 500 (z.B.) Millisekunden nach neuen "Nachrichten" schauen.
Gibt es da nicht eine bessere Lösung (sowas wie OnExecute, wie beim Server, wäre natürlich genial)?

MfG,

Manu
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#2

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 18:48
Hallo Manu,
schau Dir das Beispiel aus diesem Beitrag an.

bye
Claus

Sorry alles zurück. Nimm das anhängende Beispiel. Da werden die eingehenden Nachrichten über TThread verarbeitet.
Angehängte Dateien
Dateityp: zip beispiel_195.zip (15,4 KB, 36x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 19:12
Hi,

danke für dein Beispiel. Ich schaue mir das mal an und versuche es zu verstehen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 19:48
Hi,

ich hab nun mal versucht, dein Beispiel bei mir anzubauen. Der Thread läuft, aber es kommt nichts an.

Code:

Delphi-Quellcode:
procedure TClientHandler.Execute;
var
  SizeOfIncomingStream: Integer;
begin
  while not Terminated do
  begin
    if Form2.TCPClient.Connected then
    begin
      try
        CS := TChatStream.Create;
        SizeOfIncomingStream := Form2.TCPClient.ReadInteger();
        Form2.TCPClient.ReadStream(CS, SizeOfIncomingStream);
        Synchronize(HandleInput);
        CS.Free;
      except
        CS.Free;
      end;
    end;
  end;
end;

procedure TClientHandler.HandleInput;
begin
  Form2.HandleInput(CS);
end;

procedure TForm2.HandleInput(var ChatStream: TChatStream);
var
  CP: TChatParser;
begin
  CP := TChatParser.Create(ChatStream.Msg);
  CP.Parse;

  HandleMessages(CP);

  CP.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  ClientThread := TClientHandler.Create(true);
  ClientThread.FreeOnTerminate := true;
  ClientThread.Resume;
end;
Woran könnte das noch liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#5

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 19:56
Hallo Manu,
ich versuche es jetzt mal aus dem Bauch heraus, ich vermute, es liegt an der "SizeOfIncomingStream".

 Form2.TCPClient.ReadStream(CS, SizeOfIncomingStream); So lange nicht alle Zeichen des Streams angekommen sind, die kommen sollen, wartet Readstream auf die restlichen Zeichen. Ich hatte das auch einmal. Ich habe es erst gemerkt, als ich mehr geschickt habe, als kommen sollte.

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 11. Dez 2005, 20:07
Hi Claus,


ok, du hast recht. Ich sende 37 Bytes und empfangen werden, sollen ein paar Millionen Bytes.

Die Frage ist, wie komme ich an die richtige Zahl der Bytes dran? Extra die Anzahl der Bytes senden?
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#7

Re: Vernünftig mit Indy9 TCPClient empfangen

  Alt 12. Dez 2005, 07:33
Hallo Manu,
ich würde es so machen. Erst die Anzahl der Bytes als Integer etc. übermitteln. Die Größe kennst Du ja. Dann die Daten hinterher.

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz