2017-04-26 9 views
2

私はindyサーバーで新しく、この単純な作業に苦労しています。サーバーを作成してファイルをアップロードする必要があります。そのサイズは常に128バイトです。その後、誰かがサーバーのホームページを開くと、ファイルは自動的に送信されます。だから、:Delphi indyがストリームをクライアントに送信する

  1. あなたは、私が127.0.0.1を設定していることがわかります下に(ディスク上のファイル(128バイトである1)
  2. ブラウザを開き
  3. Firefoxの
  4. のようなタイプのURLをアップロードします。 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; 

これは形式です:

enter image description here

スタートButton1で、エンドButton2です。あなたが見ることができるように、私はファイルをストリームにロードして、ページを開くときに出力として送信しようとしています。これは正しい方法ですか?あなたは、Webブラウザ経由でファイルにアクセスしているので、あなたの代わりにTIdTCPServerTIdHTTPServerを使用する必要があります

+0

だけマイナーnitpick:あなたがコンポーネントに意味のある名前を付けるならば、あなたがする必要はありません'Button1'などが何であるか説明してください。例えば。 'StartBtn'と' StopBtn'です。 –

+0

またtry-finallyやtry-catchブロックを使うべきです –

答えて

3

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; 
+0

そしてtcpサーバはどうですか?私はブラウザで彼にアクセスしませんが、とにかく私は推測すると、それはIPとポートを持っている必要があります。それじゃない?どうもありがとうbtwこれは完璧です –

+1

@ RaffaeleRossiはい、もちろんTCPサーバーはIPとポートが必要です。ただし、プロトコルを実装する必要があります。 'TIdHTTPServer'はHTTPプロトコルを実装します。 'TIdTCPServer'を使用する場合は、独自のプロトコルを実装する必要があります。 –

+0

すばらしい、私はそれについて確信していなかった。私は以前のtcpに依存していたテストHTTPを研究していますので、センソを作ります。ありがとうございました! –

関連する問題