دلفی و شبکه - Indy

saalek110

Well-Known Member
http://www.delphitips.com/tipstext.cgi?tipsId=109

دانلود از اینترنت:
ابتدا WinInet را uses کنید.
سپس بعد {$R *.dfm} تابع زیر را بیافزایید:
کد:
function GetInetFile
(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
                INTERNET_OPEN_TYPE_PRECONFIG,
               nil, nil, 0);
try
  hURL := InternetOpenURL(hSession,
            PChar(fileURL),
            nil,0,0,0);
  try
   AssignFile(f, FileName);
   Rewrite(f,1);
   repeat
    InternetReadFile(hURL, @Buffer,
                     SizeOf(Buffer), BufferLen);
    BlockWrite(f, Buffer, BufferLen)
   until BufferLen = 0;
   CloseFile(f);
   Result:=True;
  finally
   InternetCloseHandle(hURL)
  end
finally
  InternetCloseHandle(hSession)
end
end;
یک باتون هم به فرم بیافزایید. در رویداد کلیک آن کد زیر را بیافزایید:
کد:
procedure TForm1.Button1Click(Sender: TObject);
var
 InternetFile,LocalFile: string;
begin
InternetFile:='http://irdelphi.250free.com/g/g2/a1/e1.jpg';
LocalFile:='c:/delphispirit.gif';

if GetInetFile(InternetFile,LocalFile)=True then
   ShowMessage('download')
else
  ShowMessage('Can not download the updated files');
 end;
نتیجه اجرا:
باید در درایو سی عکس زیر را داشته باشید:

e1.jpg
 

saalek110

Well-Known Member
یک برنامه php آماده کردم که فایل php با ورودی خود یک صفحه وب ساده می سازد.
کد:
<html>
 <title>site_saaz</title>
<body>
<?

    if (isset ($_REQUEST["filename"]) )
          $site_url= $_REQUEST["filename"]; 
	else 
	     $site_url="empty";
		 
	if (isset ($_REQUEST["text"]) ) 
            $site_text= $_REQUEST["text"]; 
    else
	         $site_text="empty_file";

$fh = fopen($site_url.".html", "w");
@fwrite($fh, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n");
@fwrite($fh, "<html>\n");
@fwrite($fh, "<body>\n");
@fwrite($fh, "<p>\n");
@fwrite($fh, $site_text."\n");
@fwrite($fh, "</p>\n");
@fwrite($fh, "</body>\n");
@fwrite($fh, "</html>\n");
fclose($fh);

echo"<a href=".$site_url.".html>".$site_url.".html</a>";

?>
</body>
</html>
البته کدهای php را از خودم نوشتم و فقط خواستم تمرینی بکنم. اون فایل html هم که ساخته میشه به ساده ترین حالت ممکنه نوشتم. و نمی گم کامله.
در این فایل از REQUEST استفاده کردم که شامل post و get است. یعنی جایگزین هر دو هست.
اون برنامه دلفی که post می کرد را می تونید روی این فایل php تنظیم کنید و این طوری از دسکتاپ خود با یک کلیک سایتی بسازید.
در انتهای برنامه هم به سایت شما لینک می دهد و می توانید بلافاصله مشاهده کنید. البته در یک سایت که من امتحان کردم متوجه شدم که وقتی فایلی با کد ساخته می شود پرمیشن اجرا را ندارد. احتمالا به خاطر امنیت است. و باید بعد ایجاد فایل برویم پرمیشن را هم تغییر دهیم. وقتی هم که به جای فایل html برنامه فایل php تولید کند باز پرمیشن اجرا را ندارد.
 

saalek110

Well-Known Member
ذخیره یک صفحه وب راههای مختلفی دارد و شاید با webbrowser راه مناسبی نباشد. ولی هدف تمرین و کار آموزشی است.

از تب internet یک webbrowser و دو باتون روی فرم اضافه کنید.
کدهای زیر یکی برای باز کردن سایت در webbrowser و دیگری برای ذخیره در هارد است:

کد:
  webbrowser1.Navigate('www.google.com');

کد:
try 
webbrowser1.ExecWB
(OLECMDID_SAVEAS,OLECMDEXECOPT_DODEFAULT);
except
on E:Exception do
MessageBox(0,PChar('There has been an error : '
+#32 + E.Message + #32 +
Sender.ClassName),PChar('Oeps'),
MB_OK + MB_ICONERROR + MB_TASKMODAL);
end;

منبع:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=935&lngWId=7
 

saalek110

Well-Known Member
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1338&lngWId=7
راههای مختلفی برای ساختن هایپرلینک:
یک راه را من میگم.بقیه را یا در سایت بالا یا جای دیگر بخوانید.

ابتدا ComOBJ را uses کنید.
بعد یک لیبل به فرم بیافزایید و با کد کلیک زیر:
کد:
procedure TForm1.Label1Click(Sender: TObject);
const
csOLEObjName = 'InternetExplorer.Application';
var
IE : Variant;
begin
IE := CreateOleObject( csOLEObjName );
IE.Visible := true;
IE.Navigate('http://www.yahoo.com');
end;
 

saalek110

Well-Known Member
http://www.astahost.com/info.php/uploading-file-using-delphi-php-upload-script_t5461.html

آپلود فایل:
یک باتون و یک idhttp(از تب ایندی کلاینت) به فرم بیافزایید.
در ضمن IdMultipartFormData را هم uses کنید.

رویداد کلیک باتون:
کد:
procedure TForm1.Button1Click(Sender: TObject);
var
 Stream            : TIdMultipartFormDataStream;
begin
 Stream := TIdMultipartFormDataStream.Create;
 try
   Stream.AddFile( 'naame_filde_php', 'a.txt', 'text' );
   IdHTTP1.Post( 'url_here', Stream );
 finally
   Stream.Free;
 end;
end;
به جای url_here آدرس سایت که کد زیر را درش قرار می دهید قرار دهید.
-----------------------------------------
کد php سایت:
کد:
<?
if(isset($_FILES['naame_filde_php']))
{
$arquivo = $_FILES['naame_filde_php'];

if(move_uploaded_file($arquivo['tmp_name'],'p.txt'))
echo "ok";
else
echo "uploaded file was not moved";
}
else
echo "uploaded file is not available";
?>

من کد php بالا را در سایت آپلود کردم. و با برنامه دلفی آپلود با موفقیت انجام شد. البته لوکال هم می توانید تمرین کنید ولی باید آپاچی(مثلا از مجموعه EasyPHP ) یا نرم افزارهای جایگزین نصب باشه.
 

saalek110

Well-Known Member
برنامه چت

در این برنامه دو پروژه باز می کنیم. یکی برای سرور و یکی برای کلاینت.

قسمت سرور:
ابتدا از تب internet یک TcpServer روی فرم قرار دهید.
یک memo هم اضافه کنید.
دو لیبل هم اضافه کنید.
یک ادیت هم اضافه کنید.

در رویدادهای زیر کدها را وارد کنید:
کد:
procedure TForm1.FormCreate(Sender: TObject);
begin
TcpServer1.Active:= false;
TcpServer1.LocalPort:='6000';
TcpServer1.Open;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 TcpServer1.Close;
end;

procedure TForm1.TcpServer1GetThread(Sender: TObject;
  var ClientSocketThread: TClientSocketThread);
begin
   label1.caption:='GetThread';
   edit1.text:=TcpServer1.Receiveln;
end;

procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
  var
  s: string;
begin
label2.caption:='Accept';

       Memo1.Lines.Add('Start Sending Data');
  Memo1.Lines.Add('Rem Host: ' +
    ClientSocket.LookupHostName(ClientSocket.RemoteHost) + ' (' + ClientSocket.RemoteHost + ')');
  s := ClientSocket.Receiveln;
  while s <> '' do
  begin
    Memo1.Lines.Add(s);
    s := ClientSocket.Receiveln;
  end;
 Memo1.Lines.Add('End Sending Data');
end;

قسمت کلاینت

از تب internet یک TcpClient اضافه کنید.
سه لیبل و یک ادیت و دو باتون هم اضافه کنید.
کدهای زیر را هم اضافه کنید به رویدادهای مربوطه:
کد:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TcpClient1.close;
end;

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
  label3.Caption:='connected';
  TcpClient1.Sendln('hello');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.Active:=false;
TcpClient1.RemotePort:='6000';
label1.Caption:=TcpClient1.RemoteHost;
TcpClient1.RemoteHost:='127.0.0.1';
TcpClient1.Open;
Label2.Caption:=TcpClient1.RemotePort;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     TcpClient1.Sendln('how are you?');
end;
 

جدیدترین ارسال ها

بالا