小鸟游星野
小鸟游星野
Published on 2025-05-09 / 17 Visits
0
0

Unity网络基础域名解析

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


Comment