本日はUnity枠です。
Unityでsocket通信を行う場合は相手のIPアドレスを指定する必要があります。
クラウドなどでサーバーを公開しない場合はIPローカルネットワークもしくはVPN経由でのアドレスを使用する必要があります。前回はIPアドレスを取得する実装を行いましたが、この時に表示されるIPが複数取得されていた場合、一番最初のIPが表示されます。
どういうことかというとVPNを使用している場合などWi-fiなどで使用しているIPアドレスとは別に複数のIPが設定されていることがあります。

具体的にはTailScaleを使用した場合は100.から始まるIPアドレスが用いられます。
今回は前回の実装を改良して特定のIPが取得されるようにしていきます。
〇環境
・Unity2022.3.26f1
・Windows11PC
〇特定のIPアドレスのみ表示
今回はいきなりコードから共有します。
string GetLocalIPAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
string fallbackIP = null;
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
string ipString = ip.ToString();
// Tailscale特有のIPアドレス(100.x.x.x)を優先
if (ipString.StartsWith("100."))
{
return ipString;
}
// Tailscale以外のIPv4アドレスを一時的に保持
fallbackIP = ipString;
}
}
// TailscaleのIPアドレスが見つからない場合、他のIPv4アドレスを返す
if (fallbackIP != null)
{
return fallbackIP;
}
throw new System.Exception("No network adapters with an IPv4 address in the system!");
}
今回はTailScaleのIPアドレスが100.xxであることがわかっていたため、string.StartsWith()は文字列が引数の文字列から始まるかを判定するものです。
つまり100.から始まるIPを取得しています。
本日は以上です。
if (ipString.StartsWith("100."))
{
return ipString;
}