AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Hilfe bei Readln von TIdTCPClient
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei Readln von TIdTCPClient

Ein Thema von WMeinecke · begonnen am 24. Feb 2005 · letzter Beitrag vom 25. Feb 2005
Antwort Antwort
WMeinecke

Registriert seit: 24. Feb 2005
4 Beiträge
 
#1

Hilfe bei Readln von TIdTCPClient

  Alt 24. Feb 2005, 14:40
Hallo,

ich hab ein Problem mit dem Lesen von Text über die Readln-Funktion von TIdTCPClient.
Beim ersten Lesen kann ich alle Teile einer Response abholen. Wenn ich aber einen neuen Request an den Server schicken, wird die Procedure Writeln() ausgeführt. Will ich nun mittels Redln lesen, bekomme ich die Fehlermeldung "Socket-Fehler # 10053. Die Software hat den Abbruch der Verbindung verursacht".
Ich prüfe vor dem Writeln auch noch auf Connected. Das klappt. Dieser Fehler tritt nur ab dem zweiten Senden auf. Wenn ich ein Disconnect nach dem Senden/Empfangen mache, klappt es auch ab dem zweiten. Allerdings wird die Anwendung dadurch sehr langsam.

Wer kann mir helfen?

Gruss W.M.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Hilfe bei Readln von TIdTCPClient

  Alt 24. Feb 2005, 14:54
Ohne Quelltext ist das schwierig zu sagen, woran es liegt. Vielleicht könntest du ja mal den Code, welcher vom Server und vom Client ausgeführt wird, hier posten.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
WMeinecke

Registriert seit: 24. Feb 2005
4 Beiträge
 
#3

Re: Hilfe bei Readln von TIdTCPClient

  Alt 24. Feb 2005, 21:13
Den des Clients kann ich gerne norgen früh posten. Bei dem des Servers hab ich keine Möglichkeit.

Im Grunde läuft das so ab:

1. Connct zum Server
2. Daten aufbereiten
3. Daten an den Server übermitteln, mittels Writeln
4. Daten von Server empfangen mittels Readln.
4.1 Schleife, solange bis Stopp-Flag kommt (immer Readln)
5. Daten weiterverarbeiten
6. Nächsten Datensatz holen und wieder Senden mit Writeln.

Was mich wundert , ist, ich prüfe vor dem Writeln, ob der Client connected ist. Dann schreibe ich. Und beim Lesen kommt die Fehlermeldung. Hab auch mal auf die Eigenschaften des Controls geschaut, bevor ich lese, sieht so aus, als ob es verbunden ist, da GracefullyClosed auf false steht.


Hab allerdings ein Java-Testprog, welches sich connected und dann mehrere Anfragen nach einander an den Server senden kann, aber davon hab ich leider auch keine Quelltext.


Wie gesagt der Quelltext kommt morgen früh
  Mit Zitat antworten Zitat
WMeinecke

Registriert seit: 24. Feb 2005
4 Beiträge
 
#4

Re: Hilfe bei Readln von TIdTCPClient

  Alt 25. Feb 2005, 06:58
So, hier nun der Quelltext

TRY
FullResponse := '';
if not m_oClientSocket.Connected then
begin
m_oClientSocket.Connect();
end;

m_oClientSocket.WriteLn(Request);
REPEAT

Response := m_oClientSocket.ReadLn(#$A);
IF Response <> '' THEN
BEGIN
FullResponse := FullResponse + Response + #$A;
if Response='bla' then break;
END;
UNTIL Response = '';
EXCEPT
ON E: Exception DO
BEGIN
Showmessage(E.Message);
END;
END;
FINALLY
m_oClientSocket.Disconnect;
END;

Wie gesagt. Ich hätte es ganz gerne ohne das Disconnect.
  Mit Zitat antworten Zitat
WMeinecke

Registriert seit: 24. Feb 2005
4 Beiträge
 
#5

Re: Hilfe bei Readln von TIdTCPClient

  Alt 25. Feb 2005, 06:58
So, hier nun der Quelltext

Delphi-Quellcode:
  TRY
      FullResponse := '';
      if not m_oClientSocket.Connected then
      begin
      m_oClientSocket.Connect();
      end;

      m_oClientSocket.WriteLn(Request);
      REPEAT

        Response := m_oClientSocket.ReadLn(#$A);
        IF Response <> 'THEN
          BEGIN
            FullResponse := FullResponse + Response + #$A;
          if Response='blathen break;
          END;
      UNTIL Response = '';
    EXCEPT
      ON E: Exception DO
        BEGIN
          Showmessage(E.Message);
        END;
    END;
  FINALLY
[b] m_oClientSocket.Disconnect;[/b]
 END;
Wie gesagt. Ich hätte es ganz gerne ohne das Disconnect.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08: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