ورود

View Full Version : چک کردن اتصال به اینترنت



sara.ghavam
پنج شنبه 11 آذر 1395, 03:26 صبح
سلام دوستان عزیزم من تازه وارد در دلفی هستم
من یک کد برای دلفی میخوام که چک کنه که آیا اتصال به اینترنت برقرار هست یا خیر؟
البته یک کد رو پیدا کردم که فقط اتصال به شبکه رو چک میکنه یعنی اگر به شبکه وصل باشی اما اینترنت نداشته باشی باز هم میزنه که متصل هستی به اینترنت که اشتباه هستش

negative60
پنج شنبه 11 آذر 1395, 04:52 صبح
به ترتیب از توابع InternetGetConnectedState (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384702(v=vs.85).aspx) API و InternetCheckConnection (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384346(v=vs.85).aspx) استفاده کنید

hp1361
شنبه 13 آذر 1395, 08:44 صبح
سلام

در تکمیل صحبت negative60 عزیز



uses
Winapi.WinInet;



procedure TForm1.btn_InternetGetConnectedStateClick(Sender: TObject);
var
origin: Cardinal;
// connections origins by origin value
// NO INTERNET CONNECTION = 0;
// INTERNET_CONNECTION_MODEM = 1;
// INTERNET_CONNECTION_LAN = 2;
// INTERNET_CONNECTION_PROXY = 4;
// INTERNET_CONNECTION_MODEM_BUSY = 8;
begin
if InternetGetConnectedState(@origin, 0) then
ShowMessage('اتصال به اینترنت وجود دارد!')
else
ShowMessage('اتصالی وجود ندارد!')
end;


مقادیر موجود در متغیر origin نشاندهنده نحوه اتصال به اینترنت خواهد بود(اتصال از طریق LAN، از طریق مودم و ...)

این رو هم درنظر داشته باشید که ممکنه پروسه چک کردن وجود اتصال زمانبر بشه و اونوقت UI کاربر به حالت قفل دربیاد! لذا استفاده از یک ترد جداگانه پیشنهاد میشه.

البته بیشتر پیشنها میشه به بک سرور که همیشه در اینترنت UP هست کانکت بشین و از نتیجه اون استفاده کنید چرا که بعضی مواقع ممکنه سیستم عامل نتیجه درستی بر نگردونه!

موفق باشیم

Mask
شنبه 13 آذر 1395, 12:00 عصر
در شرایط مختلف این کد بکار نمیاد.
معتبرین راه استفاده از پینگ هست.

sara.ghavam
شنبه 13 آذر 1395, 15:09 عصر
سلام

در تکمیل صحبت negative60 عزیز



uses
Winapi.WinInet;



procedure TForm1.btn_InternetGetConnectedStateClick(Sender: TObject);
var
origin: Cardinal;
// connections origins by origin value
// NO INTERNET CONNECTION = 0;
// INTERNET_CONNECTION_MODEM = 1;
// INTERNET_CONNECTION_LAN = 2;
// INTERNET_CONNECTION_PROXY = 4;
// INTERNET_CONNECTION_MODEM_BUSY = 8;
begin
if InternetGetConnectedState(@origin, 0) then
ShowMessage('اتصال به اینترنت وجود دارد!')
else
ShowMessage('اتصالی وجود ندارد!')
end;


مقادیر موجود در متغیر origin نشاندهنده نحوه اتصال به اینترنت خواهد بود(اتصال از طریق LAN، از طریق مودم و ...)

این رو هم درنظر داشته باشید که ممکنه پروسه چک کردن وجود اتصال زمانبر بشه و اونوقت UI کاربر به حالت قفل دربیاد! لذا استفاده از یک ترد جداگانه پیشنهاد میشه.

البته بیشتر پیشنها میشه به بک سرور که همیشه در اینترنت UP هست کانکت بشین و از نتیجه اون استفاده کنید چرا که بعضی مواقع ممکنه سیستم عامل نتیجه درستی بر نگردونه!

موفق باشیم

ممنون از پاسختون اما این هم همون مشکل رو داره اگر به شبکه وصل باشی اما شبکه به اینترنت وصل نباشه باز میزنه که به اینترنت متصل است

sara.ghavam
شنبه 13 آذر 1395, 15:09 عصر
در شرایط مختلف این کد بکار نمیاد.
معتبرین راه استفاده از پینگ هست.

سلام
میشه لطفا بفرمایید که چطوری میشه؟ و کمکم کنید؟

sara.ghavam
شنبه 13 آذر 1395, 15:50 عصر
به ترتیب از توابع InternetGetConnectedState (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384702(v=vs.85).aspx) API و InternetCheckConnection (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384346(v=vs.85).aspx) استفاده کنید

چطوری میشه ازش استفاده کرد؟

Mask
یک شنبه 14 آذر 1395, 23:55 عصر
سلام
میشه لطفا بفرمایید که چطوری میشه؟ و کمکم کنید؟
کافیه یه کامپوننت icmp بزارید روی فرمتون.
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent; const AReplyStatus: TReplyStatus);
begin
memo1.lines.Add(inttostr(i)+'- host '+AReplyStatus.FromIpAddress+' sent '+inttostr(AReplyStatus.BytesReceived)+' bytes date in '+IntToStr(AReplyStatus.MsRoundTripTime)+' ms.');
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
IdIcmpClient1.ReceiveTimeout:=SpinEdit2.Value;
IdIcmpClient1.Host:=edit1.Text;
for i:=1 to SpinEdit1.Value do IdIcmpClient1.Ping('',0);
memo1.Lines.Add('-----------------------------------------------------------------------------------------');
end;


procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
memo1.lines.Add(inttostr(i)+'- host '+AReplyStatus.FromIpAddress+' sent '+inttostr(AReplyStatus.BytesReceived)+' bytes date in '+IntToStr(AReplyStatus.MsRoundTripTime)+' ms.');
end;

negative60
دوشنبه 15 آذر 1395, 02:12 صبح
چطوری میشه ازش استفاده کرد؟

همونطور که از بقیه API‌ ها استفاده می‌کنید با استفاده از توضیحات داده شده تو سایت مرجع یا گوگل کردن.


const FLAG_ICC_FORCE_CONNECTION = 1;


begin
if InternetCheckConnection('http://www.google.com', FLAG_ICC_FORCE_CONNECTION, 0)
then ShowMessage('Connected')
else ShowMessage('No Connected');
end;




این رو هم درنظر داشته باشید که ممکنه پروسه چک کردن وجود اتصال زمانبر بشه و اونوقت UI کاربر به حالت قفل دربیاد! لذا استفاده از یک ترد جداگانه پیشنهاد میشه.

به این مورد هم توجه کنید که برنامه فریز نشه

sara.ghavam
دوشنبه 15 آذر 1395, 12:51 عصر
همونطور که از بقیه API‌ ها استفاده می‌کنید با استفاده از توضیحات داده شده تو سایت مرجع یا گوگل کردن.


const FLAG_ICC_FORCE_CONNECTION = 1;


begin
if InternetCheckConnection('http://www.google.com', FLAG_ICC_FORCE_CONNECTION, 0)
then ShowMessage('Connected')
else ShowMessage('No Connected');
end;



به این مورد هم توجه کنید که برنامه فریز نشه


ممنونم
این درست کار کرد اما برای جلوگیری از فریز شدن چیکار باید بکنم؟ باید ترد بنویسم؟