# Native Code > برنامه نویسی در 6 VB > برنامه نویسی مرتبط با شبکه و وب در VB6 >  تست اتصال به اینترنت

## sajjad_india

با سلام 

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

سواله اینجانب : میخوام وقتی سیستم به اینترنت متصل شد یه پیغام بده که به اینترنت کانکت شده . با چه ماژول و ..... میتونم استفاده کنم ؟


ممنون . از همگی ممنون

----------


## javid_debugger

*با اینکه سوالت تکراریه ولی:*

*اینو بزار تو جنرال*

 
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long



*اینم بزار تو یه تایمر(هر وقت به اینترنت وصل بشه اطلاع میده)*

IsOffLine = InternetGetConnectedState(INTERNET_CONNECTION_MODE  M_BUSY, 0&)
If IsOffLine = 0 Then
MsgBox "Be Internet Connect Nist"
Else
MsgBox "Be Internet Connect Ast"
End If

*موفق باشی*

----------


## butterfly8528

سلام دوست عزیز این مطمئن ترین روشه



```
Const NETWORK_ALIVE_AOL = &H4
Const NETWORK_ALIVE_LAN = &H1
Const NETWORK_ALIVE_WAN = &H2
Private Declare Function IsNetworkAlive Lib "SENSAPI.DLL" (ByRef lpdwFlags As Long) As Long
 
Private Sub Form_Load()
     Dim CRes As Long
     If IsNetworkAlive(CResult) = 0 Then
          MsgBox " Not Connected to a Network!"
     Else
          MsgBox "Connected to a" & IIf(CRes = NETWORK_ALIVE_AOL, "AOL", IIf(CRes = NETWORK_ALIVE_LAN, "LAN", "WAN")) & "Network"
     End If
End Sub
```

موفق باشید

----------


## r0ot$harp

*دوست عزیز اگر می خواهید مطمئن شوید که به اینترنت وصل هستین یا نه از کد پست شماره 2 استفاده کنید .

من خودم همیشه از این استفاده می کنم . 

البته راه دیگه ای هست از طریق کنترل Winsock . به اینصورت که شما مثلا به سایت Google.Com متصل می شوین و وقتی Event مربوط به اتصال جرا شد اون وقت مطمئن باشین که اتصال انجام شده است. 


باتشکر احسان
*

----------


## Faravahar

مشکل هر دو شون اینجانست وقتی کابل شبکه رو در می یارید میگه وصل نیست . در حالی که اگه آپی رو تغییر بدین همیشه وصله ولی آیا صفحه باز می شه یا می شه جایی رو (مثل یاهو) پینگ زد .  نه نمیشه ولی کد شما بازم نشون میده کنکته.  بررسی کنید!

من یه راه حل دارم
یه جایی رو پینگ بزنید اگه پاسخی دریافت شد یعنی کانکته وگر نه در هر شرایطی کانکت نیست.
یه برنامه ضمیمش می کنم. یه فایل dll هم داره که باید add کنید.

اینکه هنوز سوالات زیادی دارم دلیل زنده بودنم است!

----------


## parselearn

يك مساله
آيا وضعيت اينترنت adsl رو هم ميشه بررسي كرد؟

----------


## IamOverlord

سلام دوستان!
به نظر من بهترین راه استفاده از ping هست. مرورگرهایی مثل opera یا firefox هم برای چک کردن اتصال به اینترنت از همین روش ارسال و دریافت packet های کوچک استفاده می کنند.

----------


## xxxxx_xxxxx

> يك مساله
> آيا وضعيت اينترنت adsl رو هم ميشه بررسي كرد؟


در پست دوم، چون اغلب دو تا Connection وجود داره، نه نمیشه. اگر تنها Local وصل باشد باز هم پیغام اتصال به اینترنت داده میشه.

در پست سوم یک مشکل کوچولو وجود داره. شما هر نوع کانکشنی که داشته باشید همیشه با پیغام Connected to aWAN مواجه میشید. مگر اینکه هیچ کدام از کانکشن ها وصل نباشند.
مشکل در اسم متغیر هست. یه متغیر با نام CResult را به تابع داده ایم درحالی که بعد آمده مقدار CRes را چک کرده که خب همیشه 0 هست. :چشمک:  اگر CResult رو به CRes تغییر نام بدید مشکل حل میشه. اونوقت در مورد وضعیت adsl هم جواب میده. یعنی اگر تنها Local متصل باشه پیغام LAN میده و اگر به اینترنت متصل باشید پیغام WAN میده.

روش پینگ کردن هم روش خوبی هست اما برای کارهای on time مناسب نیست.

یه روش دیگه استفاده از تابع isDestinationReachable هست که تقریباً مشابه پینگ کردن عمل می کنه. یک url بهش میدید و چند خروجی داره که از رو خروجی ها میشه فهمید که به اینترنت وصل هستیم یا نه. پس این هم از لحاظ زمانی سریع نیست.

موفق باشید/

----------


## Faravahar

> در پست دوم، چون اغلب دو تا Connection وجود داره، نه نمیشه. اگر تنها Local وصل باشد باز هم پیغام اتصال به اینترنت داده میشه.
> 
> در پست سوم یک مشکل کوچولو وجود داره. شما هر نوع کانکشنی که داشته باشید همیشه با پیغام Connected to aWAN مواجه میشید. مگر اینکه هیچ کدام از کانکشن ها وصل نباشند.
> مشکل در اسم متغیر هست. یه متغیر با نام CResult را به تابع داده ایم درحالی که بعد آمده مقدار CRes را چک کرده که خب همیشه 0 هست. اگر CResult رو به CRes تغییر نام بدید مشکل حل میشه. اونوقت در مورد وضعیت adsl هم جواب میده. یعنی اگر تنها Local متصل باشه پیغام LAN میده و اگر به اینترنت متصل باشید پیغام WAN میده.
> 
> روش پینگ کردن هم روش خوبی هست اما برای کارهای on time مناسب نیست.
> 
> یه روش دیگه استفاده از تابع isDestinationReachable هست که تقریباً مشابه پینگ کردن عمل می کنه. یک url بهش میدید و چند خروجی داره که از رو خروجی ها میشه فهمید که به اینترنت وصل هستیم یا نه. پس این هم از لحاظ زمانی سریع نیست.
> 
> موفق باشید/




ممنون xxxxxx-xxxxxx عزیز به نکته خوبی اشاره کردی ولی

من این راه رو قبلا انجام دادم (Cresult به Cres) - جواب نمیده.

امتحان کنید!

به نظر من:
 سیستم اتصال به اینترنت خارجی هایی که از این سیستم استفاده می کنن با ما فرق داره
اونا یه چیز می دونن اینکه کابل شبکه رو بزنن تو کارت >>> اینترنت داشته باشن! نه *** نه محدودیت IP-valid اونا با IP ولید کانکت می شن پس این براشون جواب می ده.
راه حل ping عالیه . حداقل برا ما ایرانیا.

برنامشو تو پست قبلیم گذاشتم...
اگه راه جدیدی به ذهنتون می رسه من که خیلی مشتاقم.

SUCCESS

----------


## <برنامه نویس>

مرسي بسيار جالب بود

يادم رفت بگم فابل dll كجاست

----------


## crazyfull

> در پست سوم یک مشکل کوچولو وجود داره. شما هر نوع کانکشنی که داشته باشید همیشه با پیغام Connected to aWAN مواجه میشید


به خاطر اينکه اشتباه از تابع استفاده ميشه

از اين ماژول استفاده کنيد

Option Explicit
Public Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
    'Internet connection VIA Proxy server.
    Public Const ProxyConnection As Long = &H4
    'Modem is busy.
    Public Const ModemConnectionIsBusy As Long = &H8
    'Internet connection is currently Offline
    Public Const InternetIsOffline As Long = &H20
    'Internet connection is currently configured
    Public Const InternetConnectionIsConfigured As Long = &H40
    'Internet connection VIA Modem.
    Public Const ModemConnection As Long = &H1
    'Remote Access Server is installed.
    Public Const RasInstalled As Long = &H10
    'Internet connection VIA LAN.
    Public Const LanConnection As Long = &H2

Public Function IsLanConnection() As Boolean
    Dim dwflags As Long
    'return True if LAN connection
    Call InternetGetConnectedState(dwflags, 0&)
    IsLanConnection = dwflags And LanConnection
End Function


Public Function IsModemConnection() As Boolean
    Dim dwflags As Long
    'return True if modem connection.
    Call InternetGetConnectedState(dwflags, 0&)
    IsModemConnection = dwflags And ModemConnection
End Function


Public Function IsProxyConnection() As Boolean
    Dim dwflags As Long
    'return True if connected through a proxy.
    Call InternetGetConnectedState(dwflags, 0&)
    IsProxyConnection = dwflags And ProxyConnection
End Function

Public Function IsConnected() As Boolean
    'Returns true if there is any internet connection.
    IsConnected = InternetGetConnectedState(0&, 0&)
  
End Function

Public Function IsRasInstalled() As Boolean
    Dim dwflags As Long
    'return True if RAS installed.
    Call InternetGetConnectedState(dwflags, 0&)
    IsRasInstalled = dwflags And RasInstalled
End Function


Public Function ConnectionTypeMsg() As String
    Dim dwflags As Long
    Dim Msg As String
    'Return Internet connection msg.

    If InternetGetConnectedState(dwflags, 0&) Then

        If dwflags And InternetConnectionIsConfigured Then
            Msg = Msg & "Internet connection is configured." & vbCrLf
        End If

        If dwflags And LanConnection Then
            Msg = Msg & "Internet connection via a LAN"
        End If

        If dwflags And ProxyConnection Then
            Msg = Msg & ", and connection is through a proxy server."
        Else
            Msg = Msg & "."
        End If

        If dwflags And ModemConnection Then
            Msg = Msg & "Internet connection via a Modem"
        End If

        If dwflags And InternetIsOffline Then
            Msg = Msg & "Internet connection is currently offline."
        End If

        If dwflags And ModemConnectionIsBusy Then
            Msg = Msg & "Modem is busy with a non-Internet connection."
        End If

        If dwflags And RasInstalled Then
            Msg = Msg & "Remote Access Services are installed on local system."
        End If
        
    Else
        Msg = "You are currently not connected to the internet."
        
    End If
    
    ConnectionTypeMsg = Msg
    
End Function

----------


## xxxxx_xxxxx

روش بعدی استفاده از تابع IsDestinationReachable :

Private Type QOCINFO
   dwSize As Long
   dwFlags As Long
   dwInSpeed As Long
   dwOutSpeed As Long
End Type

Private Declare Function IsDestinationReachable Lib "sensapi.dll" _
Alias "IsDestinationReachableA" _
(ByVal lpszDestination As String, lpQOCInfo As QOCINFO) As Long

Private Function IsConn() As String
Dim qoc As QOCINFO
ret = IsDestinationReachable("http://www.google.com", qoc)
With qoc
   Select Case .dwFlags
      Case 1: IsConn = "LAN"
      Case 2: IsConn = "RAS"
      Case Else: IsConn = "No Conn"
   End Select
End With
End Function

Private Sub Command1_Click()
MsgBox IsConn
End Sub

همونطور که قبلاً گفتم این تابع عمل ping رو انجام میده و نتایجی رو بر میگردونه که یکی از اون نتایج اطلاع از نوع Connection هست.

QOC = Quality of Connection
RAS = Remote Access Server

----------


## Veteran

این هایی که گذاشتین همشون اگر مودم adsl روشن باشه وصعیت اتصال رو نشون میدن شاید یک نفر مودمش روشن باشه اما به اینترنت هنوز وصل نشده باشه
در این مورد کدی دارید ؟

----------


## محسن واژدی

> این هایی که گذاشتین همشون اگر مودم adsl روشن باشه وصعیت اتصال رو نشون  میدن شاید یک نفر مودمش روشن باشه اما به اینترنت هنوز وصل نشده باشه
> در این مورد کدی دارید ؟


سلام علیکم
کد زیر را بررسی کنید:

Option Explicit
Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long
Public Function IsInternetConnected() As Boolean
    IsInternetConnected = CBool(InternetGetConnectedState(0&, ByVal 0&))
End Function

Private Sub Form_Load()
    MsgBox IsInternetConnected
End Sub


موفق باشید

----------


## Veteran

اینم نمیشه تست کردم همش true  هست
ولی مودم adsl رو خاموش کردم false نشون داد

----------


## محسن واژدی

> اینم نمیشه تست کردم همش true هست 
>    ولی مودم adsl رو خاموش کردم false نشون داد


   بنده به مودم ADSL دسترسی ندارم اما این تابع را با پارامتر نیز تست کنین: 
 
   Private Const INTERNET_CONNECTION_PROXY As Long = &H4 
   Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long 
   Private Sub Command1_Click() 
     MsgBox CBool(InternetGetConnectedState(INTERNET_CONNECTIO  N_PROXY, ByVal 0&)) 
   End Sub 
    

   موفق باشید

----------


## Veteran

ارروررررررررررررررررررر

----------


## محسن واژدی

> ارروررررررررررررررررررر


شاید بخاطر فاصله های اضافی باشد که در پارامتر "INTERNET__CONNECTIO  N__PROXY" پست 17 اضافه شده است

----------


## محسن واژدی

تست کردین؟

----------


## Veteran

حاجی قبل اینکه اون اروری که ضمیمه کردم بده به همون فاصله ای که گفتین ایراد میگگرفت اما اونو خودم درستش کردم بعد این اروری که گذاشتمو داد

----------


## محسن واژدی

> حاجی قبل اینکه اون اروری که ضمیمه کردم بده به همون فاصله ای که گفتین ایراد میگگرفت اما اونو خودم درستش کردم بعد این اروری که گذاشتمو داد


عجیبه، چون خودم چندبار همین کد را تست کرده ام بدون هیچ گونه مشکلی اجرا شده است و البته بر روی ویندوز xp
شاید با ویندوز سون مشکل دارد

موفق باشید

----------

