To co widać wygląda mi na zwykłe pobieranie pliku metoda GET protokołu HTTP. Adres masz, nazwę i ściezkę do pliku też. To teraz skoro znasz Delphi nawet tylko podstawy to polecam Synapse pod VCL (mój artykul na: Obsługa protokołu HTTP przy użyciu pakietu Synapse poza tym na stronie projektu jest w miarę bogata dokumentacja i przykłady) albo Simpe Tcp pod WinAPI lub do dokladniejszego ogarnięcia co ma być wysłane lub odebrane protokółem TCP (moduł pobierzez z http://piechnat.pl/article/simpletcp.html - a prosty przykład klienta i serwera są dołączone). Także podejrzewam, że należy zwrócić taki kod html jakiego oczekuje klient jeżeli jego treść jest sprawdzana. Wysłanie tego do jakiegoś serwera również nie jest problemem, a jest tymbardziej banalne, bo wszystko co potrzebujesz juz otrzymałeś obserwując sockety. Akurat podstawy protokołu HTML są według mnie banalne. Podsumowująć pozostaje Tobie tylko usiąść i to zakodować. Skoro znasz Delphi to w tym będzie najszybciej, bo z C# nie miałem w ogóle styczności dlatego nic nie doradzę. No to tyle, powodzenia.
Przerobiłem sobie ten przykład dla swoich potrzeb. I pobiera mi kod html do memo (np. z wp.pl), ale jak wpiszę adres komputera i postawię serwer za pomocą socket test to socket test nie reaguje. Kod co prawda niczym się nie różni, ale umieszczam go poniżej:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, HTTPSend, JPEG, Vcl.StdCtrls,
Vcl.ExtCtrls, IdBaseComponent, IdAntiFreezeBase, Vcl.IdAntiFreeze;
type
TForm3 = class(TForm)
Button1: TButton;
Memo1: TMemo;
IdAntiFreeze1: TIdAntiFreeze;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
const
Opera_UserAgent = 'Java/1.1-rr-b03';
implementation
{$R *.dfm}
procedure DownloadToStream(const URL : string; const SomeStream : TStream);
const
Location_Prefix = 'Location:' + #32;
var
SynHttp : THttpSend;
I, Position : integer;
Str, DirectLink : string;
begin
SynHttp := THttpSend.Create;
try
SynHttp.UserAgent := Opera_UserAgent;
SynHttp.HTTPMethod('GET', Url);
case SynHttp.ResultCode of
301, 302 :
begin
for I := 0 to SynHttp.Headers.Count - 1 do
begin
Str := SynHttp.Headers[I];
Position := Pos(Location_Prefix, Str);
if Position > 0 then
begin
DirectLink := Copy(Str, Position + Length(Location_Prefix), MaxInt);
Break;
end;
end;
DownloadToStream(DirectLink, SomeStream);
end;
else
SynHttp.Document.SaveToStream(SomeStream);
SomeStream.Position := 0;
end;
finally
SynHttp.Free;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
MemStream : TMemoryStream;
begin
MemStream := TMemoryStream.Create;
MemStream.Position := 0;
DownloadToStream('http://172.0.0.1/upg/aapll/mbb HTTP/1.1', MemStream);
MemStream.Position := 0;
try
Memo1.Lines.LoadFromStream(MemStream);
finally
MemStream.Free;
end;
end;
Chciałbym jeszcze dodać, że na zrzucie z socket test widać, że klient się łączy z serwerem. Samą metodą GET, jestem w stanie osiągnąć taki efekt?