AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy] TCP Server sendet nicht zum Client
Thema durchsuchen
Ansicht
Themen-Optionen

[Indy] TCP Server sendet nicht zum Client

Ein Thema von Delphi Nub · begonnen am 9. Aug 2004 · letzter Beitrag vom 12. Okt 2004
Antwort Antwort
Delphi Nub

Registriert seit: 21. Jul 2004
Ort: Greifswald
14 Beiträge
 
Delphi 7 Enterprise
 
#1

[Indy] TCP Server sendet nicht zum Client

  Alt 9. Aug 2004, 19:34
Hiho

habe folgendes Problem: Ich kann via Wirteln von Clienten an den Server einen String schicken aber mit dem selben Befehl nicht von Server zum Clienten. Warum nicht?

Delphi-Quellcode:
procedure TForm1.IdTCPServer2Execute(AThread: TIdPeerThread);
var s:string;
begin
with Athread.Connection do
begin
s:=readln; //das klappt
s:=uppercase(s);
if s='UPDATEthen
Writeln(ComponentToString(Listview2)); //das aber nicht mehr
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
with IdTCPClient2 do
begin
  writeln('Update'); //das klappt auch
  Try
    Listview2.Create(StringToComponent(readln)); // Dies wieder nicht
   finally
    Disconnect
    end;
end;
end;
Wo liegt der Fehler?
  Mit Zitat antworten Zitat
GuybrushThreepwood

Registriert seit: 8. Aug 2004
Ort: Mannheim
50 Beiträge
 
#2

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 9. Aug 2004, 22:25
1. Ich will ja nicht nerven, aber ich wollte mal fragen, wozu das StringToComponent und ComponentToString ist... Denn ich bin Anfänger und blicke da voll nicht durch.

2. Was willst du Senden ??? Die Einträge ???

Danke im voraus.
Ich grüße alle mit und ohne Glieder. Alle Mit und ohne Bürger.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 9. Aug 2004, 22:55
ich denke das der Fehler bei ComponentToString liegt.
Versuch mal als Server Antwort nen einfachen String zum client schickst.
Das geht bestimmt !
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
GuybrushThreepwood

Registriert seit: 8. Aug 2004
Ort: Mannheim
50 Beiträge
 
#4

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 9. Aug 2004, 23:21
Jupp, es könnte an StringToComponent liegen, denn das hier geht.

Delphi-Quellcode:
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
  ShowMessage(IdTCPClient1.ReadLn('', 10000, 512));
  IdTCPClient1.Disconnect;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdTCPClient1.Connect(10000);
end;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  AThread.Connection.WriteLn('Kuckuck...');
end;
Und zwar hervorragend...
Ich grüße alle mit und ohne Glieder. Alle Mit und ohne Bürger.
  Mit Zitat antworten Zitat
Delphi Nub

Registriert seit: 21. Jul 2004
Ort: Greifswald
14 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 10. Aug 2004, 07:55
Delphi-Quellcode:
function ComponentToString(Component: TComponent): string;

var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

function StringToComponent(Value: string): TComponent;
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      Result := BinStream.ReadComponent(nil);

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;
Hier erstmal die StringtoComponent und ComponenttoString Fkt. die mal auch in der Delphi Hilfe findet.

Dann ergeibt sich gleich die nächste Frage: Wie sende eine ganze Componente oder einen Teil dieser Componente auf Anfrage des Clienten von Server an diesen Clienten?
  Mit Zitat antworten Zitat
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 10. Aug 2004, 09:12
okay, der code hier is vielleicht net gerade der beste, sollte aber funktionieren (indy 10):
Delphi-Quellcode:
uses ..., IdContext, ...


procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var eCommand:String;
    eList:TStringList;
begin
repeat
  try
    eCommand := AContext.Connection.Socket.ReadLn;
    eCommand := UpperCase(eCommand);
    if eCommand = 'UPDATEthen begin
      eList := TStringList.Create;
      eList.Text := ComponentToString(Self); //hier dann z.b. ListView1
      AContext.Connection.Socket.Write(eList, True);
      eList.Free;
    end;
  except
    //mach was beim fehler
  end;
until (Application.Terminated) or (not AContext.Connection.Connected);
end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
var eList:TStringList;
begin
IdTCPClient1.Socket.WriteLn('UPDATE');
eList := TStringList.Create;
IdTCPClient1.Socket.ReadStrings(eList);
showmessage(eList.Text);
eList.Free;
end;
btw würde ich ReadLn etc. in Hier im Forum suchenthreads auslagern...
Christian
  Mit Zitat antworten Zitat
Delphi Nub

Registriert seit: 21. Jul 2004
Ort: Greifswald
14 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 10. Aug 2004, 14:14
@ Basic-Master
Danke für deine Mühe. Habe leider nur Indy9. D.h. der Code läuft bei mir nicht. Kann man mein Problem nicht auch mit der 9'er Version lösen oder muss ich mir die 10'er Beta installieren?
  Mit Zitat antworten Zitat
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 10. Aug 2004, 19:16
hmm der code sollte net schwer zu converten sein.. lass die unit IdContext in den uses weg und ersetz mal alle AContext durch AThread in meinem OnExecute-Event.. sollte funzen, bin mir aber net sicher
Christian
  Mit Zitat antworten Zitat
Delphi Nub

Registriert seit: 21. Jul 2004
Ort: Greifswald
14 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 11. Aug 2004, 08:43
Schade alles schon gemacht. Nach den Convertieren gibts den gleichen Fehler wie vorher. Programm läuft fest. Rien ne va plus = Nichts geht mehr.

Habe mir schon überlegt die Compunente in einen Stream zu packen und dann zu versenden hat aber auch nicht geklappt. Liegt vielleicht auch an mir, denn bei Senden und Empfangen von Stream's blicke ich noch nicht so durch.

Hier der StreamVersuch (läuft auch nicht)

Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var s:string; MS:tstream;
begin
with Athread.Connection do
begin
  s:=readln;
  s:=uppercase(s);
  if s='UPDATEthen
   begin
    try
      ms:=tmemorystream.Create;
      ms.WriteComponent(listview2);
      OpenWriteBuffer;
       try
        WriteStream(ms, true, true, 0);
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      ms.Free;
    end;
  end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ms: TStream;
  SizeOfIncomingStream: integer;
begin
  ms:=Tmemorystream.Create;
  with IdTCPClient1 do
   begin
    connect;
    writeln('Update');
     try
      SizeOfIncomingStream := ReadInteger;
      ReadStream(ms, SizeOfIncomingStream);
     finally
      Disconnect;
      ms.ReadComponent(listview1); //Bin mir nicht ganz sicht ob dies richtig ist?!
      ms.Free;
    end;
   end;
end;
Habe mich an der Vorlage aus der Code-Library gehalten.
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: [Indy] TCP Server sendet nicht zum Client

  Alt 12. Okt 2004, 15:03
hallo,

du kannst Athread nur einmal auslesen

alternative Athread in einer variable speichern

[Edit]Ich sollt die Beiträge vor Erstellen einer Antwort lesen

mfg
freak

+ =
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  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 01:54 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