2016-11-14 3 views
0

Я пытаюсь написать простую программу, которая находит публичный IP-адрес для компьютера, на котором он используется. Однако я не уверен, как установить текст TextBox на найденный IP-адрес. Может кто-нибудь мне помочь?Попытка написать IP-адрес в текстовое поле в Visual Basic

Код:

Imports System.Net 
Imports System.Text 
Imports System.Text.RegularExpressions 
Public Class Form1 
    Private Function GetMyIP() As IPAddress 
     Using wc As New WebClient 
      Return IPAddress.Parse(Encoding.ASCII.GetString(wc.DownloadData("http://tools.feron.it/php/ip.php"))) 

     End Using 
    End Function 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     TextBox1.Text = (GetMyIP()) 
    End Sub 

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) 

    End Sub 
End Class 

ответ

0

Во-первых, вы должны использовать Option Strict On. Это было бы указать вам, что вам нужно использовать

TextBox1.Text = GetMyIP().ToString() 

Далее, если вы изучите заголовки из этой веб-страницы, вы увидите, что она возвращает результат в UTF-8 кодировке, так что вы должны использовать Encoding.UTF8 вместо , К сожалению, это все еще не работает - я напишу об этом позже.

Однако, WebClient имеет DownloadString method, который хорошо работает в этом случае:

Private Function GetMyIP() As IPAddress 
    Using wc As New WebClient 
     Dim url = "http://tools.feron.it/php/ip.php" 
     Dim x = wc.DownloadString(url) 
     Return IPAddress.Parse(x.Trim()) 
    End Using 

End Function 

Если вы все еще хотите использовать DownloadData, вы должны изучить возвращаемые байты: вы обнаружите, что данные, которые вы хотите, которым предшествуют байты 0xEF 0xBB 0xBF. Я не знаю почему. Это испортит строку, которую вы хотите, если вы загрузите ее как массив байтов.

Вы можете использовать LINQ для удаления странных байт:

Private Function GetMyIP() As IPAddress 
    Using wc As New WebClient 
     Dim url = "http://tools.feron.it/php/ip.php" 
     Dim x = wc.DownloadData(url) 
     Dim y = Encoding.UTF8.GetString(x.Where(Function(b) b < 128).ToArray()) 
     Return IPAddress.Parse(y) 
    End Using 

End Function 

(. Я мог бы использовать там, потому что байты более 127 были удалены)

+0

Большого спасибо за этот ответ, Я нашел несколько более простой способ кодирования этого, но это блестящий ответ в любом случае. Спасибо вам большое за ваше время :). – IsaSca

Смежные вопросы