Einzelnen Beitrag anzeigen

Marlon

Registriert seit: 16. Mär 2016
4 Beiträge
 
#1

Tcp Ip bei übertragung fehlen bytes

  Alt 16. Mär 2016, 10:52
Hallo Leute,
nachdem ich mich gestern mühsam in das Protokoll eingearbeitet habe, weil fast alles was man zu Indy findet aus alten Versionen ist, dachte ich ich könnte damit abschließen .
mein Problem ist dass bei der Übertragung von Daten immer vier Bytes fehlen.
Woran könnte das liegen?

Client:

Delphi-Quellcode:
procedure TFileExchangeClientForm.SetClientState(aState : Boolean);
begin
  if (aState = True) then
     begin
     IdTCPClient1.Connect;
     end
     else
     begin
     IdTCPClient1.Disconnect;
     end;
end;

function ClientSendFile(AClient: TIdTCPClient; Filename: String): Boolean;
begin
  AClient.IOHandler.LargeStream := True;
  Result := True;
  try
    AClient.IOHandler.WriteFile(Filename);
  except
    Result := False;
  end;
end;

procedure TFileExchangeClientForm.Button_SendStreamClick(Sender: TObject);
var
  LSize: LongInt;
begin
  IdTCPClient1.Host := '127.0.0.1';
  IdTCPClient1.Port := 6000;
  IdTCPClient1.Connect;
  LSize := 0;
  Memo1.Lines.Add('Versuche Stream zu Server zu schicken');
  if (ClientSendFile(IdTCPClient1, FileNameEdit.Text) = False) then
  begin
    Memo1.Lines.Add('Buffer konnte nicht gesendet werden' +
       FileNameEdit.Text);
    Exit;
  end
  else
  begin
    Memo1.Lines.Add('Buffer wird gesendet an ' + FileNameEdit.Text);
  end;
  SetClientState(False);
end;
Server:

Delphi-Quellcode:

procedure TFileExchangeServerForm.IdTCPServer1Execute(AContext: TIdContext);
var
  LSize: LongInt;
  file1 : String;
begin
  AContext.Connection.IOHandler.ReadTimeout := 9000;
  file1:= SaveFileEdit.Text;
  if (ServerReceiveFile(AContext, file1) = False ) then
  begin
    TIdNotify.NotifyMethod(ShowCannotGetFileErrorMessage);
    Exit;
  end;
  TIdNotify.NotifyMethod(FileReceived);
end;

function ServerReceiveFile(AContext: TIdContext; ServerFilename: String): Boolean;
var
  AStream: TFileStream;
begin
  try
    Result := True;
    AStream := TFileStream.Create(ServerFilename, fmCreate + fmShareDenyNone);
    try
      AContext.Connection.IOHandler.ReadStream(AStream);
    finally
      FreeAndNil(AStream);
    end;
  except
    Result := False;
  end;
end;
mfg Marlon

Geändert von Marlon (16. Mär 2016 um 10:59 Uhr)
  Mit Zitat antworten Zitat