2016-11-14 13 views
0

私は、使用しているコンピュータのパブリックIPを見つける簡単なプログラムを作成しようとしています。しかし、私は見つけられたIPアドレスにTextBoxのテキストを設定する方法がわかりません。誰でも助けてくれますか?Visual BasicのテキストボックスにIPアドレスを書き込もうとしています

コード:

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() 

次を使用する必要があることをあなたに指摘でしょうあなたがEncoding.UTF8代わりのを使用する必要がありますので、あなたがそのウェブページからのヘッダーを調べる場合は、それがUTF-8エンコーディングで結果を返します表示されます。残念ながら、それはまだ機能しません - 私は後でそれについてもっと書くつもりです。

しかし、Webクライアントは、この場合にはうまく機能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

関連する問題