【转自:https://www.cnblogs.com/IPrograming/archive/2012/10/11/CSharp_Socket_2.html

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

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)的网络接口信息,我们使用下面的两个类:

  1. NetworkInterface类:提供了访问主机所有接口的信息的功能。利用该类我们可以方便的检测本机有多少个网卡、哪些网络连接可用、并获取某个网卡的型号、Mac地址和速度等信息。
  2. 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)识别网络主机

    通过前面的笔记我们可以知道:一个客户端要想发起一次通信,先决条件就是需要知道运行在服务端程序的主机的IP地址是多少,端口号是多少.然后我们才能够通过这个地址向服务器特定的应用程序发送信息.对于网络上的 ...

  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. 2018-2019-2 20165114《网络对抗技术》Exp2 后门原理与实践

    目录 一.实验准备 二.实验内容 三.基础问题回答 四.实验过程及步骤 五.实验总结与体会 六.实验中遇到的问题与错误. 一.实验准备 1.后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里 ...

  2. JS中函数之外不能写return

    JS中return有时会遇到这种情况,具体表现为:google浏览器等浏览器可以继续执行,IE浏览器不能执行return,并且google浏览器:执行时会显示SyntaxError: Illegal ...

  3. 初识 Zookeeper

    云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信息如何推送到各个节点?并且保 ...

  4. Spring注解(AOP)

    底层动态代理 程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 导入aop的相关模块 <!-- https://mvnrepository.com/artifact/org. ...

  5. 分布式技术 webapi 路由追加html、aspx、shtml 适用于 对接 安卓、IOS

    首先是这样,在对接安卓和IOS或者是第三方调用的接口,我需要在服务端返回一个带.html/.aspx这样后缀的接口. 例子如下图:http://localhost:64131/api/UsersInf ...

  6. Dijkstra算法 - 最短路径算法

    2017-07-26 22:30:45 writer:pprp dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度, 选择路径长度最小的顶点加入到集合 ...

  7. 死循环的/etc/profile

    用户服务器登陆后停在以下界面 Connecting to ... Connection established. To escape to local shell, press 'Ctrl+Alt+] ...

  8. 【JAVA学习】java虚拟机内存配置,-Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m

    转自:https://blog.csdn.net/a503921892/article/details/39048737 配置tomcat服务器内存大小中的Xms.Xmx.PermSize.MaxPe ...

  9. lucene学习-1 - 准备工具

    需要准备的内容: jdk 1.7 eclipse Kepler lucene 4.10.2 luke 4.10.2 以及一些txt文档 其他的不需多说,只简要介绍下luke. 以下内容来自百度百科: ...

  10. Spring:通配符的匹配很全面, 但无法找到元素 XXXXX' 的声明

    问题:配置Spring的时候容易发生如题的这样一个经常性的错误,错误如下(以context为例) org.springframework.beans.factory.xml.XmlBeanDefini ...