Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

网络通化前的前置知识

一、IP 类和端口类

1.IP 类和端口类的作用


我们知道想要进行网络通信,进行网络连接
首先我们需要找到对应设备,IP 和端口号是定位网络中设备必不可少的关键元素
C#中提供了财应的 IP 和端口相关的类 来声明对应信息
对于之后的网络通信是必不可少的内容

2.IPAdress 类

命名空间 System.Net

1.)通过 byte 进行初始化

1
2
byte[] ipAddress = new byte[] { 118, 102, 111, 11 };
IPAddress ip1 = new IPAddress(ipAddress);

2.)通过长整型进行初始化(不建议使用)

1
IPAddress ip2 = new IPAddress(0x79666F0B);

3.)通过字符串进行转化(推荐)

1
2
IPAddress ip3 = IPAddress.Parse("118.102.111.11");
//注意特殊IP:127.0.0.1代表本机知识

4.)一些静态成员


获取可用的 IPv6 地址
IPAddress.IPv6Any

3.IPEndPoint 类


将网络端点表示 Ip 地址和端口号,表现为 IP 地址和端口号的组合
命名空间 System.Net

1.)初始化

1
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("118.102.111.11"), 8080);

二、域名解析

1.域名解析是什么?


域名解析也叫域名指向、服务器设置、域名配置以及反向 IP 登记等等
说得简单点就是将好记的域名解析成 IP
IP 地址是网络上标识站点地址,但是 IP 地址相对来说记忆困难
所以为了方便记忆,采用域名来代替 IP 地址标识站点地址。
比如 我们要登录一个网页 www.baidu.com 这个就是域名 我们可以通过记忆域名来记忆一个远端服务器的地址,而不是记录一个复杂的 IP 地址


域名解析就是域名到 IP 地址的转换过程。
域名的解析工作由 DNS 服务器完成
我们在进行通信时有时会有需求通过域名获取 IP
所以这节课我们就来学习 c#提供的域名解析相关的类
> 域名系统(英文:Domain Name system,缩写:DNS)是互联网的一项服务 > 它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网 > 是因特网上解决网上机器命名的一种系统,因为 IP 地址记忆不方便,就采用了域名系统来管理名字和 IP 的对应关系

三、IPHostEntry 类


命名空间 System.Net
主要作用:域名解析后的返回值 可以通过该对象获取 IP 地址、主机名等等信息
该类不会自己声明,都是作为某些方法的返回值返回信息,我们主要通过该类对象获取返回的信息

  • 获取关联 IP 成员变量:AddressList
  • 获取主机别名列表 成员变量:Aliases
  • 获取 DNS 名称 成员变量:HostName

四、DNS 类


命名空间 System.Net
主要作用:Dns 是一个静态类,提供了很多静态方法,可以使用它来根据域名获取 IP 地址

1.获取本地系统的 IP 信息

1
2
//1.获取本地系统的Ip信息
print(Dns.GetHostName());

2.获取指定域名的 IP 信息

同步获取

1
2
3
4
5
6
7
8
9
10
11
12
//根据域名获取
IPHostEntry entry = Dns.GetHostEntry("www.baidu.com");
for (int i = 0; i < entry.AddressList.Length; i++)
{
print("IP地址:" + entry.AddressList[i]);
}
for (int i = 0; i < entry.Aliases.Length; i++)
{
print("主机别名:" + entry.Aliases[i]);
}
print("DNS服务器名称" + entry.HostName);
//注意:由于远程获取主机信息是需要网络连接的,所以可能会阻塞主线程

异步获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GetHostEntry();
private async void GetHostEntry()
{
Task<IPHostEntry> task = Dns.GetHostEntryAsync("www.baidu.com");
await task;
for (int i = 0; i < task.Result.AddressList.Length; i++)
{
print("IP地址:" + task.Result.AddressList[i]);
}
for (int i = 0; i < task.Result.Aliases.Length; i++)
{
print("主机别名:" + task.Result.Aliases[i]);
}
print("DNS服务器名称" + task.Result.HostName);
}

五、网络上的数据传输


在网络通讯中
我们一般把想要传递的类对象信息先转化为 2 进制数据(多为 byte 字节数组)
再将该 2 进制数据通过网络传输给远端设备
远端设备获取到该 2 进制数据后再将其反序列化为对应的类对象

序列化和反序列化

  • 序列化
    将类对象信息转化为可保存或传输的格式(例如:二进制、json 字符串、Xml 等等)过程
  • 反序列化
    将保存或者传输的格式转化为类对象的过程

1.网络通讯相关重要知识点

  1. Bitconverter 类
    主要用于处理各个类型和字节数组之间的相互转化
  2. Encoding 类
    主要用于处理字符串和字节数组之间的相互转化
  3. 加密相关
    了解 2 进制数据加密的常用手段

2.本地持久化相关重要知识点

  1. File 类
    文件操作类,用于操作文件
  2. FileStream 类
    文件流类,以流的形式进行文件储存读取
  3. MemoryStream 类
    内存流类
  4. BinaryFormatter 类
    2 进制格式化对象(网络开发不用这个序列化,其他语言无法识别该类转化的数据)

评论