簡體   English   中英

Delphi Indy將流發送到客戶端

[英]Delphi indy send stream to client

我是Indy服務器的新手,所以我正在為這個簡單的任務而苦苦掙扎。 我必須創建一個服務器並上傳一個小文件; 它的大小始終為128個字節。 然后,當有人打開服務器的主頁時,文件將自動發送。 所以:

  1. 在磁盤上載一個文件(一個128字節的文件)
  2. 打開類似Firefox的瀏覽器
  3. 輸入網址(在下面,您可以看到我已經設置了127.0.0.1:798),當您按Enter鍵時,會出現一個白色頁面,但是會出現一個對話框,要求您下載文件。

到目前為止,我已經編寫了以下代碼:

procedure TForm1.Button1Click(Sender: TObject);
begin

 // IP = 127.0.0.1:798 (port is 798)
 IdTCPServer1.Active := true;
 Memo1.Lines.Add('Server started at: ' + TimeToStr(Now) + slinebreak);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 IdTCPServer1.Active := false;
 Memo1.Lines.Add('Server stopped at: ' + TimeToStr(Now));

end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var a: TFileStream;

begin

  a := TFileStream.Create('C:\Users\defaulr.user\Desktop\datfile.pkm', fmOpenWrite);
  AContext.Connection.IOHandler.Write(a);

end;

形式如下:

在此處輸入圖片說明

開始是Button1 ,結束是Button2 如您所見,我正在流中加載文件,然后在打開頁面時嘗試將其作為輸出發送。 這是正確的方法嗎?

由於您是通過Web瀏覽器訪問文件的,因此您應該使用TIdHTTPServer而不是TIdTCPServer

procedure TForm1.Button1Click(Sender: TObject);
begin
  // IP = 127.0.0.1:798 (port is 798)
  IdHTTPServer1.Active := true;
  Memo1.Lines.Add('Server started at: ' + TimeToStr(Now));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  IdHTTPServer1.Active := false;
  Memo1.Lines.Add('Server stopped at: ' + TimeToStr(Now));
end;

// TIdHTTPServer.OnCommandGet event handler...
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  if ARequestInfo.Document = '/' then
  begin
    AResponseInfo.ResponseNo := 200;
    AResponseInfo.ServeFile(AContext, 'C:\Users\defaulr.user\Desktop\datfile.pkm');
    // alternatively:
    // AResponseInfo.SmartServeFile(AContext, ARequestInfo, 'C:\Users\defaulr.user\Desktop\datfile.pkm');
  end else
    AResponseInfo.ResponseNo := 404;
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM