回答編集履歴

1 コード例のAPIを変更

tamoto

tamoto score 2854

2016/10/04 15:14  投稿

こんにちは。
質問文の`wi-fiのIPアドレス`というのは、おそらく「グローバルIPアドレス」のことですかね。
その前提で回答してみます。
グローバルIPアドレスは「WAN側から見た自分のアドレス」のことなので、
WANに接しているルーターなどの中身を覗きに行くか、または適当なWebサービスを利用するのが手っ取り早いでしょう。
以下のコードはWebサービスを利用してグローバルIPアドレスを取得するコードになります。
これで目的のものが入手できるでしょうか?
```csharp
async Task Test()
{
   using (var client = new HttpClient()) // HttpClientをusingで使うのは本当はよくない
   {
       try
       {
           var responce = await client.GetStringAsync("http://inet-ip.info/ip"); // inet-ip.info のAPIを利用
           var responce = await client.GetStringAsync("https://api.ipify.org"); // ipifyのサービスを利用
           Console.WriteLine(responce);
       }
       catch
       {
           // 接続エラーが起きたりすると例外が出るので何か処理すること
       }
   }
}
```
---
せっかくなのでクラスにしてみました。
丸ごとコピーすればそのまま使えると思います。
```csharp
// using System.Net.Http; を追加
public static class GlobalIPAddressGetter
{
   private const string api = "http://inet-ip.info/ip";
   private const string api = "https://api.ipify.org";
   private static readonly WeakReference<HttpClient> weakreference = new WeakReference<HttpClient>(null);
   public static Task<string> GetAsync()
   {
       var client = default(HttpClient);
       if (!weakreference.TryGetTarget(out client))
           weakreference.SetTarget(client = new HttpClient());
       return client.GetStringAsync(api);
   }
}
```
awaitを付けて呼び出すだけです。例外処理は必須です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る