网络编程
Socket 套接字
什么是套接字?套接字有哪几种类型?
套接字是支持TCP/IP网络通讯协议的基本操作单元,是不同主机间进行通信的端点。在同一个套接字中,及保存这本机的IP地址和端口,也保存着对方的IP地址和端口,同时也保存了双方通信采用的网络协议等信息。
套接字有3中类型:流式套接字(SOCK_Stream 面向连接的通讯方式即TCP)、数据报套接字(SOCK_DGRAM 面向无连接的通讯方式 UDP)、原始套接字。
1.IPAddress System.Net命名空间下的IPAddress类提供了对IP地址转换和处理的功能,一般用IPAddress类提供的静态方法Parse将IP地址字符串转换为IPAddress实例:
IPAddress ip=IPAddress.Parse("127.0.0.1"); 为什么要转换?
另外,IPAddress还提供了7个只读字段:
Any 提供一个IPv4地址,指示服务端真挺所有网络接口上的客户端活动,它等效于0.0.0.0
Broadcast 提供IPv4网络广播地址,它等效于255.255.255.255
IPv6Any 提供所有可用的IPv6地址
IPv6Loopback 表示系统的IPv6回环地址,等效于::1
Ipv6None 提供不适用任何网络接口的IP地址
Loopback 表示系统的IPv4 回环地址,等效于127.0.0.1
None 表示Socket不应侦听客户端活动(不适用任何网络接口)
2.IPEndPoint 是与IPAddress概念相关的一个类,它包含应用程序连接到主机上的服务所需的主机IP和端口信息。
这个类的的构造函数需要两个参数 IPEndPoint iep=new IPEndpoint(IPAddress address,int port)
3.IPHostEntry类
IPHostEntry类将一个域名系统(DNS)的主机名与一组别名和一组匹配的IP地址关联。该类一般和Dns类一起使用
IPHostEntry类的实例包含了Internet主机的相关信息,常用属性有AddressList属性和HostName属性
AddressList属性的作用是获取或设置与主机关联的IP地址列表(包括IPv4和IPv6),这是一个IPAddress类型的数组,该数组包含了指定主机的所有IP地址
在Dns类中,有一个专门获取IPHostEntry对象的静态方法,获取IPHostEntry对象之后,再通过它获取IPAddressList属性获取本地和远程主机的IP地址列表。
如:
//根据域名获取IP地址列表
IPAddress[] ips=Dns.GetHostEntry("www.baidu.com").AddressList;
//获取本机IPv4和IPv6地址
ips=Dns.GetHostEntry().
4.Dns 域名系统 System.Net
Dns类的常用方法
GetHostAddress 返回指定主机的Internet协议IP地址,与该方法对应的还有异步方法
GetHostEntry 将主机名或IP地址解析为IPHostEntry实例,与该方法对应的还有异步方法
GetHostName 获取本地计算机主机名
可以看出Dns的GetHostEntry()和GetHostAddress()方法由于需要在Dns服务器中查询某个主机名或IP地址关联地址集合,所以这两个方法的执行有网络延迟、网络堵塞等因素的影响,因此.net矿建既提供了同步方法,页提供了对应的异步方法。
5.AddressFamily
AddressFamily.InterNetworkV6 Ipv6 地址
对网络流量和本机网络地址等信息的访问类都在System.Net.NetworkInfomation命名空间下:
1.NetworkInterface 类 System.Net.NetworkInformation
可以获取网络适配器型号、MAC地址和速度等信息。
NetworkInterface[] adapters=NetworkInterface.GetAllNetworkInterfaces();
常用方法和属性
Name 属性 获取网络适配器名称
Speed属性 获取网络适配器的速度
GetAllNetworkInterfaces 返回描述本地计算机上的所有适配器对象,语法:public static NetworkInterfaces[] GetAllnetworkInterfaces()
GetIPProperties 描述此网络适配器配置的对象 语法:public abstract IPInterfaceProperties GetIPProperties()
GetIPv4Statistics 获取IPv4统计信息 语法public abstract IPv4InterfaceStatistics GetIPv4Statistics()
GetIsNetworkAvailable 方法 指示是否有任何可用的网络连接。 语法:public static bool GetIsNetworkAvaliable()
GetPhysicalAddress 返回适配器的媒体访问控制MAC地址 public abstract PhysicalAddress GetPhsicalAddress()
Supports方法 指示接口是否支持指定的协议 (IPv4或IPv6)如果支持则为true
2.IPInterfaceProperties类
IPInterfaceProperties是一个抽象类,因此不能直接创建该类的实例,而使通过调用NetworkInterface对象的GetIPProperties方法得到该类的实例
NetworkInterface[] adpapters=NetworkInterface.GetAllNetworkInterfaces()
IPInterfaceProperties adapterProperties=adpapters[0].GetIpProperties()