C#笔记6 网络编程基础,解释端口套接字,代码实例分析DNS,IPAddress等类

news2024/12/25 9:16:08

一、计算机网络基础

这一点毋庸置疑,想要写一个使用网络接口传输数据的程序,不知道计算机网络的基本知识是很难的。

局域网与广域网

所谓的WAN和LAN其实就是网络的一个范围界定。WAN为广域网,中间会包含更多的互联网设备,由无数个局域网组成。LAN局域网应该更加令人熟悉,因为我们日常生活中建立家庭网络环境,搭建路由器,配置网络环境,乃至于使用虚拟机,都会听到这样一个词。

那么我们的网络编程技术就要涉及到网络协议的部分,所谓网络协议就是规定了计算机之间连接的物理、机械、电气等特征。

局域网内一般是比较好测试的环境,因为此时你的设备一般离你比较近,甚至都是你家庭内的设备,但是涉及到广域网乃至于整个互联网,此时就需要比较复杂的网络协议才能维持运作。

我们今天提到这一概念的目的并不是要学习计算机网络,而是为我们代码中要用到的角色做个铺垫。IP,DNS,TCP,UDP,大家都了解多少呢?

IP是什么相信大家或多或少了解过,总而言之,这是一台计算机,在当前网络下的身份证号或者说门牌号,是和同一个网络环境乃至于不同网络环境通信的关键。

TCP是一种可靠连接的数据通信协议,运行在传输层,与之相比哈游一种不可靠,无连接的传输协议UDP。

DNS是域名解析服务,domain name system,是根据给到的网址域名寻找对应计算机的服务。除此之外还有很多基础协议类似于路由协议中的内部网关协议和外部网关协议等等。

端口和套接字

端口

在了解了基础的网络通讯基础和条件之后我们就来认识一个概念:端口。

如果说我们互联网世界IP对应一个房子的门牌号的话,当数据包到达我的计算机防火墙等等的地方,该怎么进入我们的房子呢?此时就会用到我们的端口(门)了,端口是从0到65535的一个取值的数字,也就是说我们在找到房子之后,还要找到对的门进入。其中0-1023的数字被保留用于一些比较知名的网络服务和应用,所以我们要避开冲突,除此之外,我们应当给应用程序预留一段可以使用的范围或者允许用户自定义而不是只在一个端口上提供服务,这对我们程序兼容性能以及宣传起步是十分不利的。

当我们写了一个程序监听了我们的端口之后,相当于我们就拥有了提供服务的条件。

套接字是什么

socket这一词在英文中翻译过来意味着插座,在我们网络通信中,这一概念理解为两台计算机中间的一种连线。既然我们刚刚说过了,计算机建立连接需要端口,那么连接建立成功之后像不像一条线插在插座上呢。因为我们访问一个端口建立连接也是需要使用本地端口发出的。

四元组

源ip:源端口:目的ip:目的端口

这四个元素组成的组合决定了一个TCP连接,一般我们建立连接只需要确定目标ip和目标端口就可以,操作系统会分配对应的端口给程序,对于linux而言,还有文件描述符用于读写数据。

所以限制TCP连接的数目并不是端口数,而是与端口数有关的一系列更大的数字和条件。

二、C#中与IP相关的类

DNS类

Dns 类 (System.Net) | Microsoft Learn

最重要的几个方法:

 在下面代码中展示了

  1. 如何获取对应主机ip,
  2. 如何通过ip获取主机名,
  3. 如何通过ip或者主机名获得对方的IPHostEntry实例。
  4. 获取本地的主机名

 


using System.Net;
//返回指定主机ip
IPAddress[] ips=Dns.GetHostAddresses("www.baidu.com");
//返回对应ip或者主机名的IPhostEntry实例
IPHostEntry iPHostEntry = Dns.GetHostEntry("www.baidu.com");
//获得本地主机名
string myhostname = Dns.GetHostName();
//解析刚刚获得的hostentry
string hostName = iPHostEntry.HostName;
IPAddress[] addressList = iPHostEntry.AddressList;
string[] aliases = iPHostEntry.Aliases;


//

//弃用的
//IPHostEntry dnssig=Dns.GetHostByName("dreamer");


Console.WriteLine("www.baidu.com s'IpHostEntry:\n IP Addresses:");
foreach (IPAddress ip in ips)
{
    Console.WriteLine(ip.ToString());
}

Console.WriteLine("\n主机名(Host Name): \n" + hostName);
Console.WriteLine("Address List:");
foreach (IPAddress address in addressList)
{
    Console.WriteLine(address.ToString());
}

Console.WriteLine("别名(Aliases):");
foreach (string alias in aliases)
{
    Console.WriteLine(alias);
}

Console.WriteLine("\n我的主机名(My Host Name): \n" + myhostname);

Console.WriteLine();

IPAddress类

顾名思义,这一个类的作用主要就是用来提供ip地址,其中包含一系列预设的属性和方法。

IPAddress 类 (System.Net) | Microsoft Learn

 下面的代码中介绍了转化ip字符串为IPAddress实例的方法等等:

  1. 转化ip为IPAddress实例,
  2. 转化一个数字为ip实例,
  3. 转化地址为字节数组

字段中包括:

  1. 代表全部监听的地址
  2. 环回地址
  3. 广播地址
  4. 代表任意IPV6地址
  5. IPv6环回地址
  6. 以及两个none地址

// 方法
IPAddress exip1 = IPAddress.Parse("192.168.1.11");
IPAddress exip2;
IPAddress.TryParse("128628", out exip2);

// 字段
IPAddress exip3 = IPAddress.Any;
IPAddress exip4 = IPAddress.Broadcast;
IPAddress exip5 = IPAddress.Loopback;
IPAddress exip6 = IPAddress.IPv6Any;
IPAddress exip7 = IPAddress.IPv6Loopback;
IPAddress exip8 = IPAddress.IPv6None;
IPAddress exip9 = IPAddress.None;

// 非静态方法
byte[] bts = exip1.GetAddressBytes();
// 属性
System.Net.Sockets.AddressFamily af = exip1.AddressFamily;
bool isipv4 = exip1.IsIPv4MappedToIPv6;
bool isipv6 = exip1.IsIPv6LinkLocal;
bool isipv6site = exip1.IsIPv6SiteLocal;

// 输出字段和属性
Console.WriteLine("\n示例 IP 地址 1 (Example IP Address 1): " + exip1.ToString());
Console.WriteLine("示例 IP 地址 2 (Example IP Address 2): " + (exip2 != null ? exip2.ToString() : "无效的 IP 地址"));
Console.WriteLine("Any 地址 (Any Address): " + exip3.ToString());
Console.WriteLine("广播地址 (Broadcast Address): " + exip4.ToString());
Console.WriteLine("Loopback 地址 (Loopback Address): " + exip5.ToString());
Console.WriteLine("IPv6 Any 地址 (IPv6 Any Address): " + exip6.ToString());
Console.WriteLine("IPv6 Loopback 地址 (IPv6 Loopback Address): " + exip7.ToString());
Console.WriteLine("IPv6 None 地址 (IPv6 None Address): " + exip8.ToString());
Console.WriteLine("None 地址 (None Address): " + exip9.ToString());

Console.WriteLine("\n示例 IP 地址 1 的字节数组 (Byte Array of Example IP Address 1): " + BitConverter.ToString(bts));
Console.WriteLine("地址族 (Address Family): " + af.ToString());
Console.WriteLine("是否为 IPv4 映射到 IPv6 (Is IPv4 Mapped to IPv6): " + isipv4);
Console.WriteLine("是否为 IPv6 链接本地地址 (Is IPv6 Link Local): " + isipv6);
Console.WriteLine("是否为 IPv6 站点本地地址 (Is IPv6 Site Local): " + isipv6site);
        

如图所示,这个类就是用于获取各类IP地址或者对Ip地址进行一些处理的方法。

其他方法可以进入上面的官网查阅文档。

 特意注释:address的family属性是什么?其实就是对ip地址进行一个分类。

 

 

也就是一个IPv4地址的意思。 

IPHostEntry类

这个类非常朴实,用于为我们的IPAddress提供容器类,我们在dns类中获取的的IpHostEntry就是这个类的实例。

IPHostEntry 类 (System.Net) | Microsoft Learn

AddressList

Aliases

HostName

 在DNS类中获取的实例就可以解析出上述信息。获取的信息用来干什么呢?什么时候用呢?

那就是后面的内容啦!欢迎大家关注,和大家一起学习。

通过计算机名获取IP地址,通过IP地址获取主机名,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2103329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI正在努力解决其面临的版权问题

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Web大学生网页作业成品——心理健康教育介绍网页设计与实现(HTML+CSS+JS)(4个页面)

🎉🎉🎉 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…

Redis Zset 类型:Score 属性在数据排序中的作用

Zset 有序集合 一 . zset 的引入二 . 常见命令2.1 zadd、zrange2.2 zcard2.3 zcount2.4 zrevrange、zrangebyscore2.5 zpopmax、zpopmin2.6 bzpopmax、bzpopmin2.7 zrank、zrevrank2.8 zscore2.9 zrem、zremrangebyrank、zremrangebyscore2.10 zincrby2.11 集合间操作交集 : zi…

自动化运维之SaltStack 部署应用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

009.数据库管理-数据字典动态性能视图

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

唯众发布职业院校信创实训室解决方案 助力职教数字化高质量发展

在数字化转型的大潮中,教育行业正迎来前所未有的变革机遇。为了积极响应国家关于自主可控、信息技术应用创新(信创)的战略部署,唯众近日发布了专为职业院校量身定制的信创实训室解决方案,旨在通过先进的技术平台和丰富…

摄影竞赛系统小程序的设计

管理员账户功能包括:系统首页,个人中心,教师管理,学生管理,辅导员管理,项目信息管理,作品信息管理,留言板管理,系统管理 微信端账号功能包括:系统首页&#…

代码随想录刷题day21丨669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,二叉树总结

代码随想录刷题day21丨669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,二叉树总结 1.题目 1.1修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode) 视频…

bootstrap下拉多选框

1、引用(引用资源下载) <!-- Latest compiled and minified CSS --> <link rel"stylesheet" href"static/css/bootstrap-select.min.css"> <!-- Latest compiled and minified JavaScript --> <script src"static/js/bootstrap…

golang-开发工具及package

1. 开发工具 工欲善其事&#xff0c;必先利其器&#xff0c;我选择vscode&#xff0c;其它的工具比如goland也不错 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 我的环境是是debian linux&#xff0c;所以我下载deb包&#xff0c;下载完成后&am…

CTFHub技能树-备份文件下载-vim缓存

目录 方法一&#xff1a;直接浏览器访问 方法二&#xff1a;使用kali恢复vim缓存文件 方法三&#xff1a;直接使用curl访问 最后同样备份文件系列的都可用dirsearch扫描 当开发人员在线上环境中使用 vim 编辑器&#xff0c;在使用过程中会留下 vim 编辑器缓存&#xff0c;当…

江科大/江协科技 STM32学习笔记P30

文章目录 一、FlyMcu串口下载1、串口下载的流程2、串口烧录的选项字节区 二、STLINK Utility 一、FlyMcu串口下载 1、串口下载的流程 例如机器人给自己换电池&#xff0c;需要拆掉旧电池再装上新电池&#xff0c;为了实现这个步骤需要再做一个小机器人&#xff0c;需要换电池时…

WinCC Modbus TCP 通信

概述 从版本WinCC V7.0 开始&#xff0c;WinCC支持Modbus TCP通讯&#xff0c;WinCC中的Modbus TCP驱动主要是针对施耐德PLC开发的&#xff0c;支持的PLC类型如下&#xff1a; 图1 本文档以Quantum CPU651和 Premium P57为例&#xff0c;介绍WinCC V7.2 的Modbus TCP通讯的组…

随手记:小程序体积超出2M包大小如何优化

小程序的包体积限制是2M&#xff0c;超出包大小如何优化 先简单列出&#xff0c;最近比较忙&#xff0c;后续优化明细&#xff0c;有着急的先留言踢我 1.分包 留几个主要的页面体积小的&#xff0c;剩下的在page.json中拆到subpackages中&#xff0c;简单举个例子 "page…

总结一下windows电脑字体模糊的优化方案

问题&#xff1a;谷歌浏览器上页面显示的字体非常细&#xff0c;有点费眼睛了&#x1f47e; 解决方案&#xff1a; 方案1&#xff1a;手动调整ClearType文本。方案2&#xff1a;英伟达显卡控制面板->管理3d设置->关闭全局平滑FXAA&#xff08;如果某个软件需要使用平滑处…

《‌黑神话:‌悟空》‌游戏攻略‌

时光荏苒&#xff0c;岁月如梭&#xff0c;不知不觉已经来到了2024年的9月份了。 ‌突然想写一篇关于《‌黑神话&#xff1a;‌悟空》‌的游戏攻略‌。 在《‌黑神话&#xff1a;‌悟空》‌这款以中国古代名著《‌西游记》‌为背景的动作角色扮演游戏中&#xff0c;‌玩家将扮…

J.U.C Review - 阻塞队列原理/源码分析

文章目录 阻塞队列的由来BlockingQueue的操作方法BlockingQueue的实现类ArrayBlockingQueueLinkedBlockingQueueDelayQueuePriorityBlockingQueueSynchronousQueue 阻塞队列原理深入分析1. 构造器和监视器初始化2. put操作的实现3. take操作的实现4. 注意事项小结 线程池中的阻…

泰克THDP0100(Tektronix)thdp0100高压差分探头详情资料

泰克 THDP0100 高压差分探头具有较大的差分动态范围功能&#xff0c;为用户提供了安全的高压测量探头解决方案。每个探头都配有两种尺寸的钩尖&#xff0c;并具有超范围视觉和声音指示器&#xff0c;当用户超出探头的线性范围时会发出警告。泰克 THDP0100 探头配备 TEkVPI 接口…

【vue css】css字体设置渐变色

实现的效果&#xff1a; 添加的代码&#xff1a; h2 {background-image: -webkit-linear-gradient(bottom, #1bffff, #ffffff);background-clip: text;//背景被裁剪成文字的前景色。-webkit-text-fill-color: transparent;//指定了文本字符的填充颜色。若未设置此属性&#xf…

【Linux操作系统】:Linux生产者消费者模型

目录 生产者消费者模型的概念 生产者消费者模型的特点 生产者消费者模型优点 基于BlockingQueue的生产者消费者模型 基于 BlockingQueue 的生产者消费者模型的概念 模拟实现基于阻塞队列的生产消费模型 生产者消费者模型的概念 生产者消费者模式就是通过一个容器来解决生…