当前位置: 首页 > news >正文

C#网络编程概述 一

C#作为一门集众家之长的语言,在各个方面尤其是网络编程方面有着很大的优势。本文就向大家介绍一下用C#进行网络编程的一些基本知识和方法。

  微软的.Net框架为我们进行网络编程提供了以下两个名字空间:System.Net以及System.Net.Sockets。通过合理运用其中的类和方法,我们可以很容易地编写出各种网络应用程序。这种网络应用程序既可以是基于流套接字的,也可以是基于数据报套接字的。而基于流套接字的通讯中采用最广泛的协议就是TCP协议,基于数据报套接字的通讯中采用最广泛的自然就是UDP协议了。

  下面我重点向大家介绍C#网络编程中的一些类:Dns类、IPHostEntry类、IPEndPoint类以及Socket类,最后我会给出相应的实例以加深读者的理解。

Dns 类:

  向使用 TCP/IP Internet 服务的应用程序提供域名服务。其Resolve()方法查询DNS服务器以将用户友好的域名(如"www.google.com")映射到数字形式的 Internet 地址(如 192.168.1.1)。Resolve()方法返回一个IPHostEnty实例,该实例包含所请求名称的地址和别名的列表。大多数情况下,可以使用 AddressList 数组中返回的第一个地址。

Resolve()方法的函数原型如下:

public static IPHostEntry Resolve(string hostName);

下面的代码获取一个 IPAddress 实例,该实例包含服务器 www.google.com 的IP地址:

IPHostEntry ipHostInfo = Dns.Resolve("www.google.com");

IPAddress ipAddress = ipHostInfo.AddressList[0];

不过在Dns类中,除了通过Resolve()方法,你还可以通过GetHostByAddress()方法以及GetHostByName()方法来得到相应的IPHostEntry实例,函数原型如下:

public static IPHostEntry GetHostByAddress(string IPAddress);

public static IPHostEntry GetHostByName(string hostName);

下面的代码显示了如何分别运用以上两种方法获得包含服务器www.google.com的相关信息的IPHostEntry实例:

IPHostEntry hostInfo=Dns.GetHostByAddress(“192.168.1.1”);

IPHostEntry hostInfo=Dns.GetHostByName("www.google.com");

在使用以上方法时,你将可能需要处理以下几种异常:

SocketException异常:访问Socket时操作系统发生错误引发

ArgumentNullException异常:参数为空引用引发

ObjectDisposedException异常:Socket已经关闭引发

以上,我向大家简要地介绍了Dns类中一些方法以及其用法,并列举出了可能出现的异常,下面就让我们转到和Dns类密切相关的IPHostEntry类。

IPHostEntry类:

该类的实例对象中包含了Internet主机的地址相关信息。此类型的所有公共静态成员对多线程操作而言都是安全的,但不保证任何实例成员是线程安全的。其中主要的一些属性有:AddressList属性、Aliases属性以及HostName属性。

AddressList属性和Aliases属性的作用分别是获取或设置与主机关联的IP地址列表以及获取或设置与主机关联的别名列表。其中AddressList属性值是一个IPAddress类型的数组,包含解析为Aliases属性中包含的主机名的IP地址;Aliases属性值是一组字符串,包含解析为AddressList 属性中的IP地址的DNS名。而HostName属性比较好理解,它包含了服务器的主要主机名,这光从名称上就可以知道了。如果服务器的DNS项定义了附加别名,则可在Aliases属性中使用这些别名。

下面的代码列出了服务器www.google.com的相关别名列表以及IP地址列表的长度并将所有的IP地址列出:

IPHostEntry IPHost = Dns.Resolve("www.google.com/");

string[] aliases = IPHost.Aliases;

Console.WriteLine(aliases.Length);



IPAddress[] addr = IPHost.AddressList;

Console.WriteLine(addr.Length);

for(int i= 0; i < addr.Length ; i++)

{

Console.WriteLine(addr[i]);

}

介绍完IPHostEntry类,我们能获得了所要连接的主机的相关IP地址以及别名列表,但是真正要和主机取得连接还需要一个很重要的类-IPEndPoint类。

相关文章:

  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • ArcSDE安装全攻略
  • 买了两本书
  • 恶心的C语言strtok函数
  • 平板电视终成市场主流
  • [原创]Java下X86机,Bytes和Int的转换
  • 五一过后第一天:)
  • [转]DVD-与DVD+格式的较量
  • 开发一个简单的WebPart
  • TXT-Access 使用DAO数据源!(VB Code)
  • 使用NUnit在.Net编程中进行单元测试
  • 沟通CTBS助华盛集团实现财务集中管理
  • 子网掩码计算小结
  • 定义本网页关键字
  • [转] 绝对实用!60款免费软件逐个点评下载
  • 深入了解以太坊
  • 【node学习】协程
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • android 一些 utils
  • Java IO学习笔记一
  • Js基础知识(一) - 变量
  • ng6--错误信息小结(持续更新)
  • Odoo domain写法及运用
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Tornado学习笔记(1)
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue2.0 实现互斥
  • 工作中总结前端开发流程--vue项目
  • 漂亮刷新控件-iOS
  • 实习面试笔记
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 通过git安装npm私有模块
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • hi-nginx-1.3.4编译安装
  • zabbix3.2监控linux磁盘IO
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​力扣解法汇总946-验证栈序列
  • # Maven错误Error executing Maven
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (第二周)效能测试
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)Linux+Windows下安装ffmpeg
  • (转)iOS字体
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .bat批处理出现中文乱码的情况
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET框架
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @Transactional类内部访问失效原因详解