Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Проверка подключения к Интернету


Автор: vdsteff 24.3.2011, 05:07
Имеется следующий код:

Код
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            If IsConnectionAvailable() Then
            ToolStripStatusLabel3.Text = "Соединение установлено"
        Else
            ToolStripStatusLabel3.Text = "Не удалось установить соединение"
        End If
    End Sub

Public Function IsConnectionAvailable() As Boolean
        Dim objUrl As New System.Uri("http://www.google.ru")
        Dim objWebReq As System.Net.WebRequest
        objWebReq = System.Net.WebRequest.Create(objUrl)
        Dim objResp As System.Net.WebResponse
        Try
            objResp = objWebReq.GetResponse
            objResp.Close()
            objWebReq = Nothing
            Return True
        Catch ex As Exception
            objResp.Close()
            objWebReq = Nothing
            Return False
        End Try
    End Function


Код не мой, взял как пример, чтобы посмотреть что да как работает. Как видно из кода при успешном подключении к "http://www.google.ru" в статус баре появится сообщение "Соединение установлено", проверял, работает, но если интернет отключен, приложение попросту не запускается, и не выдает сообщения "Не удалось установить соединение", хотя соотвествующая проверка есть.  Как это исправить? или может быть есть способ проверки подключения без использования сайта?

Также Visual Studio 2010 ругается здесь: objResp.Close() - Переменная "objResp" используется до присвоения ей значения. Во время выполнения может произойти исключение при ссылке на значение NULL, но приложение запускает

Помогите пжалуста разобраться. 

Автор: diadiavova 24.3.2011, 09:48
Цитата(vdsteff @  24.3.2011,  05:07 Найти цитируемый пост)
 но если интернет отключен, приложение попросту не запускается, и не выдает сообщения "Не удалось установить соединение", хотя соотвествующая проверка есть.  Как это исправить?

Скорей всего дело как раз в этом
Цитата(vdsteff @  24.3.2011,  05:07 Найти цитируемый пост)
Также Visual Studio 2010 ругается здесь: objResp.Close() - Переменная "objResp" используется до присвоения ей значения. Во время выполнения может произойти исключение при ссылке на значение NULL

Когда приложение запускается до блока catch дело просто не доходит, но если соединения нет, то ты получаешь новое исключение. Попробуй заменить в блоке catch
Код

objResp.Close()

На 
Код

If ojResp IsNot Nothing Then
    objResp.Close()
End If


Цитата(vdsteff @  24.3.2011,  05:07 Найти цитируемый пост)
 или может быть есть способ проверки подключения без использования сайта?

Вообще-то доступность ресурса обычно проверяют с помощью метода Microsoft.VisualBasic.Devices.Network.Ping
Или у класса System.Net.NetworkInformation.Ping тоже есть для этого методы.

Автор: vdsteff 24.3.2011, 10:30
замена кода не помогла, при отсутсвии подключения приложение не грузится вообще.
А реально существующий код дополнить timeout-ом обращения для проверки подключения и в случае если например 10 секунд подключение не просходит все равно загружать прилоложение?

Автор: 500mhz 24.3.2011, 10:30
бред какойто

есть GetInetConnectionStatus
или сделать gethostbyname


M
diadiavova
Выбирай выражения. И уж если отвечаешь, то пиши что-нибудь более вразумительное.

Автор: diadiavova 24.3.2011, 11:00
Цитата(vdsteff @  24.3.2011,  10:30 Найти цитируемый пост)
замена кода не помогла

Ну не знаю, сейчас с таким кодом послал запрос на несуществующий адрес, все сработало. С отключенной сетью не проверял, но доступна сеть или нет можно проверить с помощью
Код

My.Computer.Network.IsAvailable

А доступ к конкретному ресурсу все-таки проверяй с помощью пинга.


Автор: Freyzer 24.3.2011, 15:22
Цитата(500mhz @ 24.3.2011,  10:30)
бред какойто

есть GetInetConnectionStatus
или сделать gethostbyname

Вобще-то C# и VB.NET имеют отличия 

Автор: vdsteff 25.3.2011, 08:07
спасибо за ответы, решил проблемку немного иначе:

Код
 If My.Computer.Network.Ping("www.google.ru") = True Then
            ToolStripStatusLabel3.Text = "Соединение установлено"
        Else
            ToolStripStatusLabel3.Text = "Не удалось установить соединение"
        End If

Автор: diadiavova 25.3.2011, 10:56
Цитата(vdsteff @  25.3.2011,  08:07 Найти цитируемый пост)
решил проблемку немного иначе:

Почему иначе? Разве это не то, о чем я сразу сказал? smile 
Цитата(diadiavova @  24.3.2011,  09:48 Найти цитируемый пост)
Вообще-то доступность ресурса обычно проверяют с помощью метода Microsoft.VisualBasic.Devices.Network.Ping
Или у класса System.Net.NetworkInformation.Ping тоже есть для этого методы.

My.Computer.Network Как раз и возваращает объект Microsoft.VisualBasic.Devices.Network
Кроме того, не забывай о том, что если тебе нужно проверить наличие подключения, то пинговать конкретный сервер не всегда хорошо, поскольку к сети компьютер может быть подключен, а сервер необязательно всегда доступен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)