using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using UnityEngine;
public class Lesson2 : MonoBehaviour
{
void Start()
{
//端口类对象
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);
#region 知识点一 什么是域名解析
// 域名解析(DNS解析)包含:域名指向、反向解析、邮件交换记录、域名IP注册等
// 简单来说就是把好记的域名转换成机器可识别的IP地址
// IP地址是网络上标识站点的数字地址,通过IP地址可以直接访问目标服务器
// 为了方便记忆,人们使用域名来代替IP地址访问网站
// 例如:访问百度时输入 www.baidu.com 而不是直接输入IP地址
// 域名解析是将域名转换为IP地址的过程,由DNS服务器完成
// 当客户端需要通信时,可以通过DNS解析获取目标IP
// 今天我们将学习C#提供的域名解析相关API
#endregion
#region 知识点二 IPHostEntry类
// 命名空间:System.Net
// 作用:作为DNS查询的返回值容器,包含IP地址、别名、主机名等信息
// 重要成员:
// AddressList - IP地址数组
// Aliases - 主机别名数组
// HostName - 主机的DNS名称
#endregion
#region 知识点三 Dns类
// 命名空间:System.Net
// 作用:提供静态方法用于域名解析
// 获取本机主机名
print(Dns.GetHostName());
// 同步获取域名信息(注意:可能阻塞主线程)
// IPHostEntry entry = Dns.GetHostEntry("www.baidu.com");
// PrintEntryInfo(entry);
// 异步获取域名信息(推荐)
GetHostEntryAsync();
#endregion
#region 总结
// 当需要连接未知IP的目标时,可以通过DNS解析获取目标IP地址后再建立连接
#endregion
}
private async void GetHostEntryAsync()
{
try
{
IPHostEntry entry = await Dns.GetHostEntryAsync("www.baidu.com");
PrintEntryInfo(entry);
}
catch (System.Exception e)
{
Debug.LogError($"DNS解析失败: {e.Message}");
}
}
private void PrintEntryInfo(IPHostEntry entry)
{
foreach (IPAddress ip in entry.AddressList)
{
print($"IP地址:{ip}");
}
foreach (string alias in entry.Aliases)
{
print($"主机别名:{alias}");
}
print($"DNS主机名:{entry.HostName}");
}
void Update() { }
}