Einzelnen Beitrag anzeigen

hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

idTCPClient und idTCPServer

  Alt 26. Nov 2008, 10:52
So, ich habe jetzt mal einen neuen Thread aufgemacht, weil der alte thematisch nicht mehr wirklich dazu passt:
Ich verschicke eine Datei von der Client zur Server Komponente.
Folgende Probleme treten dabei auf:

1.) Wenn die Komponenten auf/in unterschiedlichen Forms/Units, aber in der gleichen Anwendung sind UND die Datei größer als 1 Packet ist, hängt er sich weg. Dies war gestern noch nicht so und ich habe nichts geändert - Wieso ist das so?

2.) Ich habe die Client-Komponente in eine 2. Anwendung ausgelagert und verschicke besagte Datei nun 10 mal. Dies habe ich gemacht, um zu sehen, ob die indys automatisch für jede eingehende Clientverbindung einen Thread erstellen. Und es scheint so zu sein, ABER:
Von den 10 "Versuchen", speichert er die Datei manchmal 3 mal, manchmal 4 mal, manchmal 6 mal und manchmal 8 mal (das waren die 4 Fälle, die bisher aufgetreten sind), statt genau 10 mal - Wieso ist das so?

hier mal der Code:
-Versenden:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  ms:TMemoryStream;
  strFolder:string;
  strFileName:string;
begin
  strFolder:='H:\Src\';
  strFileName:='test.pdf';
  ms:=TMemoryStream.create;
  ms.LoadFromFile(strFolder+strFileName);
  try
    if not idtcpclient1.Connected then
      idtcpclient1.Connect;
    try
      idtcpclient1.Socket.write(ms,0,true); //hier bleibt er stehen
    finally
      idtcpclient1.Disconnect;
    end;
    ms.Free;
  except
    memo1.Lines.Add('fehler bei indy-client');
  end;
end;
-Empfangen:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  ms: TMemoryStream;
  SizeOfIncomingStream: Integer;
  strFolder:string;
  strFileName:string;
begin
  memo1.Lines.Add('es kommt was');
  try
    strFolder:='H:\Ziel\';
    strFileName:='test.pdf';
    ms := TMemoryStream.Create;
    with AContext.connection do
    begin
      try
        SizeOfIncomingStream := Socket.ReadInteger;
        Socket.ReadStream(ms, SizeOfIncomingStream);
      finally
        Disconnect;
      end;
    end;
  except
    memo1.Lines.Add('fehler bei indy-server');
  end;
  ms.SaveToFile(uniquefilename(strfolder+strfilename));
  ms.Free;
end;
Beim 10-fachen Versenden habe ich einfach ne Integer-Variable erstellt, die von 1 bis 10 hochläuft.
Vielen Dank für Eure Mithilfe!!
  Mit Zitat antworten Zitat