Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121

    [DELPHI]Mandare/Ricevere file con le componenti Indy

    Salve,
    ho bisogno di mandare un file dal client al server (connessione TCP/IP con le componenti TIDTCPClient e TIDTCPServer).
    Ho scritto questo ma non va:
    Client:
    codice:
    ClientFile.Socket.WriteFile('File.xxx');
    Server:
    codice:
    procedure TMain.ServerFileExecute(AContext: TIdContext);//ServerFile è il server
    var
      Stream : TFileStream;
    begin
    Stream := TFileStream.Create('File.xxx', fmCreate);
    AContext.Connection.IOHandler.ReadStream(Stream);
    Stream.Free;
    end;
    Ma ovviamente non va, potete darmi una mano a correggere il sorgente?
    Grazie

  2. #2
    Io non userei Indy.

    Comunque (lato server):
    procedure TMainFormServer.IdTCPServerExecute(AContext: TIdContext);
    TFSFileIn: TFileStream;
    AContext.Connection.IOHandler.ReadStream(TFSFileIn );

    (Lato client):
    TFLFileOut:= TFileStream.Create(TODFile.FileName, fmOpenRead);
    IdTCPClient.IOHandler.Write(TFLFileOut, 0, true);

  3. #3
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    Scusa puoi scrivere meglio il codice?

    io ho fatto così:

    Client:
    codice:
    Client.IOHandler.Write(TFileStream.Create(Edit1.Text, fmOpenRead), 0, true);
    Server execute:
    codice:
    Stream.Create(Edit2.Text,fmCreate); AContext.Connection.IOHandler.ReadStream(Stream); 
    Stream.Free;
    Però non funziona, mi da un errore "Access violation" appena attivo il server e mi connetto con il client

  4. #4
    Ho messo solo le righe principali per non postare la funzione intera.
    Prova così:

    codice:
    procedure TMainFormServer.IdTCPServerExecute(AContext: TIdContext);
                ...
                TFSFileIn:= TFileStream.Create(Nick+ '.'+ FileName, fmCreate);
                try
                  try
                    ...
                    AContext.Connection.IOHandler.ReadStream(TFSFileIn);

    codice:
    procedure TChat.TMISendFileClick(Sender: TObject);
    var
      TFLFileOut: TFileStream;
      ...
    begin
          ...
          TFLFileOut:= TFileStream.Create(TODFile.FileName, fmOpenRead);
          try
            try
              ...
              IdTCPClient.IOHandler.Write(TFLFileOut, 0, true);

  5. #5
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    Dammi pure dello scemo, ma non riesco a capire cosa non vada:
    codice:
    //Bottone per attivare server
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Server.DefaultPort:=1234;
    Server.Active:=True;
    end;
    
    //Bottone per far connettere il client
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Client.Port:=1234;
    Client.Host:='127.0.0.1';
    Client.Connect;
    end;
    
    //Bottone per chiudere il programma
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Client.Disconnect;
    halt;
    end;
    
    //Bottone per dire al client di mandare il file
    procedure TForm1.Button4Click(Sender: TObject);
      var TFLFileOut: TFileStream;
    begin
      //Edit1.text è il nome del file da mandare ES: 'Foto.jpg'
      TFLFileOut:= TFileStream.Create(Edit1.Text, fmOpenRead);
      Client.IOHandler.Write(TFLFileOut, 0, true);
    end;
    
    //Sulla connessione del client aggiungo una linea al memo per dire che si è connesso
    procedure TForm1.ServerConnect(AContext: TIdContext);
    begin
    Memo1.Lines.Add('Connesso!');
    end;
    
    //Procedura per ricevere file
    procedure TForm1.ServerExecute(AContext: TIdContext);
      var TFSFileIn: TFileStream;
    begin
    Memo1.Lines.Add('Arriva qualcosa...');
    //Edit2 è il nome con cui salvare il file ES: 'CopiaFoto.jpg'
    TFSFileIn:= TFileStream.Create(Edit2.Text, fmCreate);
    AContext.Connection.IOHandler.ReadStream(TFSFileIn);
    TFSFileIn.Free;
    end;
    
    end.

  6. #6
    Cosa accade se lo provi?

  7. #7
    Utente di HTML.it L'avatar di XBarboX
    Registrato dal
    Dec 2008
    Messaggi
    121
    Errori nessuno, solo che il file ricevuto viene creato ma rimane sempre a 0byte di dimensione->quindi o non vengono salvati i dati o non arrivano

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.