通过前面的笔记我们可以知道:一个客户端要想发起一次通信,先决条件就是需要知道运行在服务端程序的主机的IP地址是多少,端口号是多少。然后我们才能够通过这个地址向服务器特定的应用程序发送信息。对于网络上的两台计算机来说,用户操作的计算机称为本地主机,与该计算机通信的另一台计算机称为远程主机。识别远程主机依靠两部分组成:一是主机标识,用于识别与本地主机通信的远程主机;二是端口号,用于识别是再和远程主机中的哪个进程通信。

阅读目录:
  1.获取主机地址信息
  2.获取网卡信息和网络检测  
      2.1 获取网卡信息 
      2.2 网络流量检测
      2.3 网络连接检测
  3.参考资料

1.获取主机地址信息 

在C#开发中System.Net命名空间为网络上使用的多种协议提供了简单的编程接口。我们可以利用这个命名空间下的类,编写基于网络标准协议的应用程序时,不必去考虑各种不同协议的具体细节。在获取主机(local和remote)地址信息时,我们需要使用和学习这几个最基本的类(更加详细API可以参考MSDN,下面会给出对应链接),用它们来实现相关的功能。

  • 提供网际协议的IP地址的IPAddress类
  • 包含IP地址和端口号的IPEndPoint类
  • 为Internet主机提供信息容器的IPHostEntry类
  • 提供简单的域名解析功能的Dns类

 说千遍不如做一遍,学习编程的最好方式就是自己动手实践,下面我们通过创建一个简单的Windows Forms示例程序(下载地址在博文末尾)来学习如何获取网络主机的地址信息,下面是示例的示例代码主要代码:

             //获取本地主机名
string localHostName = Dns.GetHostName(); //通过主机名获取该主机下存储所有IP地址信息的容器
IPHostEntry local = Dns.GetHostEntry(HostName); //通过IPHostEntry对象的AddressList属性获取相关联主机的所有IP地址
IPAddress[] ipList = local.AddressList; //获取本机回环地址
IPAddress loopbackIP = IPAddress.Loopback; //通过它Parse函数构造IPAddress对象
IPAddress localIp = IPAddress.Parse("192.168.1.101"); //通过IPAddress对象和端口号构造IPEndPoint对象
IPEndPoint iep = new IPEndPoint(localIp, );

  查看运行示例程序效果:

2.获取网卡信息和网络检测

 网络适配器又被称为网卡或者网络接口卡(NIC),是连接计算机和网络的硬件设备。网卡主要的工作原理是:整理计算机发往信道上的数据,并将数据分解为适当大小的数据包之后向网络上发送。在.NET开发中我们使用System.Net.NetworkInformation命名空间获取:网络流量数据、网络地址信息和本地计算机的地址更改通知等信息。 该命名空间还包含实现 Ping 实用工具的类。 可以使用 Ping 和相关的类检查是否可通过网络连接到计算机。

2.1 获取网卡信息

获取网卡信息、网络连接和网络速度以及网络协议版本(包括:IPv4和IPv6)的网络接口信息,我们使用下面的两个类:

NetworkInterface类:提供了访问主机所有接口的信息的功能。利用该类我们可以方便的检测本机有多少个网卡、哪些网络连接可用、并获取某个网卡的型号、Mac地址和速度等信息。

IPInterfaceProperties类:可用于访问支持 IPv4 或 IPv6 的网络接口的配置和地址信息。该类是一个抽象类,不能直接创建,使用NetworkInterface.GetIPProperties()返回实例。

下面我们通过一个简单的Windows Forms示例程序来学习如何获取网络接口的配置和统计信息,主要代码如下:

             //获取主机上所有的网络适配器对象数组
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); //获取该网络适配器的配置对象
IPInterfaceProperties adapterProperties = adapters[i].GetIPProperties(); //获取并该网络适配器DNS服务器地址信息
IPAddressCollection dnsServers = adapterProperties.DnsAddresses;

运行实例程序效果:

2.2 网络流量检测

我们可以使用System.Net.NetWorkInformation命名空间的IPGlobalProperties类获取网络配置器接收,转发,丢弃,发送的数据包数目,该类提供有关本地计算机的网络连接的信息。检测网络流量是我们通过使用IPGlobalProperties类的GetIPGlobalProperties() 方法获取记录本地计算机的网络连接和通信统计数据的信息的对象实例,通过实例的属性来获取相关信息,达到检测网络流量的目的:

              //获取包含本机的网络连接和通信统计数据的信息的对象
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); //获取本机IPv4统计数据
IPGlobalStatistics ipstate = properties.GetIPv4GlobalStatistics();

下面我们还是通过上面的代码来创建一个小例子来学习如何检测网络流量,程序运行效果如下:

2.3 网络连接检测

我们知道可以利用CMD命令行中输入的ping命令,通过调用ping.exe命令来检查网络连接,能够快速判断出网络故障。在.NET开发环境中我们可以通过使用System.Net.NetWorkInformation命名空间下的Ping类,PingOptions类和PingReply类来实现类似于ping.exe命令行的功能。

  • Ping类可以确定应用程序确定是否可通过网络访问远程计算机
  • PingOptions类用于控制如何传输 Ping 数据包
  • PingReply类提供有关 Send 或 SendAsync 操作的状态及产生的数据的信息。

示例程序主要代码如下:

             //获取主机地址
string hostAddress = this.txt_HostAddress.Text.Trim();
//构造Ping实例
Ping pingSender = new Ping();
//Ping选项设置
PingOptions options = new PingOptions();
options.DontFragment = true;
//测试数据
string testData = "Test Data";
byte[] buffer = Encoding.ASCII.GetBytes(testData);
//设置超时时间
int timeout = ;
//调用同步的Send方法发送数据,将结果保存至PingReply实例
PingReply reply = pingSender.Send(hostAddress, timeout, buffer, options);

 示例程序运行效果:

示例下载:猛击下载

C# Socket编程(2)识别网络主机的更多相关文章

  1. 【转】C# Socket编程(2)识别网络主机

    [转自:https://www.cnblogs.com/IPrograming/archive/2012/10/11/CSharp_Socket_2.html] 一个客户端想要发起一次通信,先决条件就 ...

  2. socket编程(struct报头)网络编程

    目录 一:socket编程 1.简介 2.参数说明: 3.socket套接字方法 4.socket编程思路: 二:socket套接字编程 1.socket简易版编程 2.通信循环 三:通信循环及代码优 ...

  3. iOS开发——网络编程OC篇&Socket编程

    Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...

  4. Java Socket编程----网络基础

    详见:https://www.cnblogs.com/rocomp/p/4790340.html Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而 ...

  5. Java Socket编程----通信是这样炼成的

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  6. TCP/UDP套接字 java socket编程实例

    网络协议七层结构: 什么是Socket? socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口.使用socket编程也称为网络编程,socket只是接口并不是网络通信协议. ...

  7. Linux socket编程示例(最简单的TCP和UDP两个例子)

    一.socket编程 网络功能是Uinux/Linux的一个重要特点,有着悠久的历史,因此有一个非常固定的编程套路. 基于TCP的网络编程: 基于连接, 在交互过程中, 服务器和客户端要保持连接, 不 ...

  8. 老雷socket编程之认识常用协议

    老雷socket编程之常见网络协议 1.ip IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西, 它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求. ...

  9. 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结

    引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...

随机推荐

  1. SortedDictionary和SortedList

    使用上两者的接口都类似字典,并且SortedList的比如Find,FindIndex,RemoveAll常用方法都没提供. 数据结构上二者差异比较大,SortedList查找数据极快,但添加新元素, ...

  2. 【TCP】超时与重传

    在TCP连接中假设发送方一开始便向网络发送多个报文段,直到达到接收方通告的窗口大小为止.当发送方和接收方处于同一个区域网段时,这种方式是可以的.但是如果发送方和接收方之间存在多个路由器和速率较慢的链路 ...

  3. SpringMvc 使用poi导入导出Excel

    Util类 package com.common.util; public class ExportUtil { private XSSFWorkbook wb = null; private XSS ...

  4. 2016年11月7日 星期一 --出埃及记 Exodus 19:23

    2016年11月7日 星期一 --出埃及记 Exodus 19:23 Moses said to the LORD, "The people cannot come up Mount Sin ...

  5. 扩展duilib edit控件的提示功能和多种文字颜色(解决edit为password显示不正常的bug)

    参考博客:Redrain 转载:http://blog.csdn.net/zhuhongshu/article/details/41786407 在Redrain博客的基础上做了修改 1.CEditU ...

  6. Action访问Servlet API

    访问Servlet API 1.通过ActionContent类访问Servlet API ActionContext中访问Servlet API的几个常用的方法: (1)Map getApplica ...

  7. Linux加载DTS设备节点的过程(以高通8974平台为例)

    DTS是Device Tree Source的缩写,用来描述设备的硬件细节.在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码, ...

  8. Gradle的配置实例

    错过了Maven,但是遇到了Gradle. 网上关于Gradle的讲解和培训已经很多了. 我就直接贴几个我测试过的配置文件吧: ① 依赖maven资源库 repositories { mavenCen ...

  9. Creating Excel File in Oracle Forms

    Below is the example to create an excel file in Oracle Forms.Pass the Sql query string to the below ...

  10. linux中mysql基本操作

    1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mys ...