C#网络编程(System.Net命名空间和System.Net.Sockets命名空间)

目录

一、System.Net命名空间

1.Dns类

(1)示例源码

(2)生成效果

2.IPAddress类

(1)示例源码

(2)生成效果

3.IPEndPoint类

(1) 示例源码

(2)生成效果

4.WebClient类

(1) 示例源码

(2)生成效果

5.WebRequest类和WebResponse类

(1) 示例源码

(2)生成效果


        C#作为一种编程语言,它提供了对网络编程的全面支持。使用C#进行网络编程时,通常都需要使用System.Net命名空间和System.Net.Sockets命名空间。

一、System.Net命名空间

        System.Net命名空间为当前网络上使用的多种协议提供了简单的编程接口,而它所包含的WebRequest类和WebResponse类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使用户能够开发出使用Internet资源的应用程序,而不必考虑各种不同协议的具体细节。

1.Dns

        Dns类是一个静态类,它从Internet域名系统(DNS)检索关于特定主机的信息。在IPHostEntry类的实例中返回来自DNS查询的主机信息。如果指定的主机在DNS数据库中有多个入口,则IPHostEntry包含多个IP地址和别名。Dns类的常用方法及说明:

 方    法

说    明

 BeginGetHostAddresses

  异步返回指定主机的Internet 协议(IP)地址

 BeginGetHostByName

  开始异步请求关于指定 DNS主机名的IPHostEntry 信息

 EndGetHostAddresses

  结束对 DNS信息的异步请求

 EndGetHostByName

  结束对 DNS信息的异步请求

EndGetHostEntry

  结束对 DNS信息的异步请求

GetHostAddresses

  返回指定主机的Internet 协议(IP)地址

GetHostByAddress

  获取 IP地址的 DNS 主机信息

GetHostByName

  获取指定 DNS 主机名的 DNS信息

GetHostEntry

  将主机名或 IP地址解析为IPHostEntry 实例

GetHostName

  获取本地计算机的主机名

(1)示例源码

//根据主机网址获取主机IP、主机DNS、主机名、本机名
using System.Net;namespace _01_1
{public partial class Form1 : Form{private Label? label1;private Label? label2;private Label? label3;private Label? label4;private Button? button1;private TextBox? textBox1;private TextBox? textBox2;private TextBox? textBox3;private TextBox? textBox4;public Form1(){InitializeComponent();Load += Form1_Load;}private void Button1_Click(object? sender, EventArgs e){if (textBox1!.Text == string.Empty)//判断是否输入了主机地址{MessageBox.Show("请输入主机地址!");}else{textBox2!.Text = string.Empty;IPAddress[] ips = Dns.GetHostAddresses(textBox1.Text);    //获取指定主机的IP地址foreach (IPAddress ip in ips)     //循环访问获得的IP地址{textBox2.Text = ip.ToString();//将得到的IP地址显示在文本框中/获取本机名}textBox3!.Text = Dns.GetHostName();}textBox4!.Text = Dns.GetHostEntry(Dns.GetHostName()).HostName;//根据指定的主机名获取DNS信息}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 9),Name = "label1",Size = new Size(43, 17),TabIndex = 0,Text = "输入主机网址:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 39),Name = "label2",Size = new Size(43, 17),TabIndex = 1,Text = "主机IP地址:"};// // label3// label3 = new Label{AutoSize = true,Location = new Point(195, 39),Name = "label3",Size = new Size(43, 17),TabIndex = 2,Text = "本地主机名:"};// // label4// label4 = new Label{AutoSize = true,Location = new Point(12, 67),Name = "label4",Size = new Size(43, 17),TabIndex = 3,Text = "DNS主机名:"};// // button1// button1 = new Button{Location = new Point(317, 3),Name = "button1",Size = new Size(75, 23),TabIndex = 4,Text = "确定",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1// textBox1 = new TextBox{Location = new Point(95, 6),Name = "textBox1",Size = new Size(140, 23),TabIndex = 5};// // textBox2// textBox2 = new TextBox{Location = new Point(95, 33),Name = "textBox2",Size = new Size(100, 23),TabIndex = 6};// // textBox3// textBox3 = new TextBox{Location = new Point(270, 33),Name = "textBox3",Size = new Size(120, 23),TabIndex = 7};// // textBox4// textBox4 = new TextBox{Location = new Point(95, 61),Name = "textBox4",Size = new Size(120, 23),TabIndex = 8};// Form1AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(404, 93);Controls.Add(textBox4);Controls.Add(textBox3);Controls.Add(textBox2);Controls.Add(textBox1);Controls.Add(button1);Controls.Add(label4);Controls.Add(label3);Controls.Add(label2);Controls.Add(label1);Name = "Form1";Text = "获取主机IP";}}
}

(2)生成效果

2.IPAddress

        IPAddress类包含计算机在IP网络上的地址,它主要用来提供网际协议(IP)地址。IPHostEntry类将一个域名系统(DNS)主机名与一组别名和一组匹配的IP地址关联。 

字段、属性及方法说    明
  Any字段   提供一个IP地址,指示服务器应侦听所有网络接口上的客户端活动。此字段为只读
  Broadcast字段   提供1P   播地址。此学段为只读
  Loopback字段   提供IP环回地址。此字段为只读
  None字段   提供指示不应使用任何网络接口的IP地址。此字段为只读
  Address属性   网际协议(IP)地址
  AddressFamily属性   获取IP地址的地址族
  IsIPv6LinkLocal属性   获取地址是否为IPv6链接本地地址
  IsIPv6Multicast属性   获取地址是否为IPv6多路广播全局地址
  IsIPv6SiteLocal属性   获取地址是否为IPv6站点本地地址
  Scopeld属性   获取或设置IPv6地址范围标识符
  GetAddressBytes)方法   以字节数组形式提供IPAddress的副本
  IsLoopback()方法   指示指定的IP地址是否是环回地址
  Parse)方法   将IP地址字符串转换为IPAddress实例
  TryParse)方法   砷定字符甲是否为有效的IP地址

(1)示例源码

//输入主机网址获取其IP地址
using System.Net;
namespace _02
{public partial class Form1 : Form{private Label? label1;private Label? label2;private Button? button1;private TextBox? textBox1;private TextBox? textBox2;public Form1(){InitializeComponent();Load += Form1_Load;}private void Button1_Click(object? sender, EventArgs e){textBox2!.Text = string.Empty;                        //初始化Label标签IPAddress[]ips =Dns.GetHostAddresses(textBox1!.Text); //获得指定主机的IP地址族 foreach (IPAddress ip in ips)                         //循环遍历得到的IP地址                                     textBox2.Text ="网际协议地址:"+ ip.Equals(IPAddress.Any) + "; \n" + "IP地址的地址族:" +ip.AddressFamily.ToString()  + "; \n" + "是否IPv6链接本地地址:" + ip.IsIPv6LinkLocal;    }private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(12, 9),Name = "label1",Size = new Size(43, 17),TabIndex = 0,Text = "输入网址:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(12, 41),Name = "label2",Size = new Size(43, 17),TabIndex = 1,Text = "显示IP:"};// // button1//button1 = new Button{Location = new Point(317, 12),Name = "button1",Size = new Size(75, 23),TabIndex = 4,Text = "确定",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // textBox1//textBox1 = new TextBox{Location = new Point(96, 12),Name = "textBox1",Size = new Size(215, 23),TabIndex = 5};// // textBox2// textBox2 = new TextBox{Location = new Point(95, 41),Multiline = true,Name = "textBox2",Size = new Size(297, 80),TabIndex = 6};// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(404, 130);Controls.Add(textBox2);Controls.Add(textBox1);Controls.Add(button1);Controls.Add(label2);Controls.Add(label1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "获取IP地址";}}
}

(2)生成效果

 

3.IPEndPoint

        IPEndPoint类包含应用程序连接到主机上的服务所需的主机和本地或远程端口信息。通过组合服务的主机IP地址和端口号,IPEndPoint类形成到服务的连接点,它主要用来将网络端点表示为IP地址和端口号。

字段及属性说    明
   MaxPort字段   指定可以分配给Port属性的最大值。MaxPort值设置为0x0000FFFF。此字段为只读
   MinPort字段   指定可以分配给Port属性的最小值。此字段为只读
   Address属性   获取或设置终结点的IP地址
   AddressFamily属性   获取网际协议(IP)地址族
   Port属性   获取或设置终结点的端口号

(1) 示例源码

(2)生成效果

​​​​​​​4.WebClient

        WebClient类提供向URI标识的任何本地、Intranet或Internet资源发送数据以及从这些资源接收数据的公共()方法。

        默认情况下,WebClient实例不发送可选的HTTP报头。如果要发送可选报头,必须将该报头添加到Headers(哈希表)集合中。

属性及方法说  明
   BaseAddress属性   获取或设置WebClient发出请求的基URI
   Encoding属性   获取和设置用于上传和下载字符串的Encoding
   Headers属性   获取或设置与请求关联的报头名称/值对集合
   QueryString属性   获取或设置与请求关联的查询名称/值对集合
   ResponseHeaders属性   获取与响应关联的报头名称/值对集合
   DownloadData()方法   以Byte数组形式通过指定的URI下载
   DownloadFile)方法   将具有指定URI的资源下载到本地文件
   DownloadString()方法   以String或URI形式下载指定的资源
   OpenReadO方法   为从具有指定URI的资源下载的数据打开一个可读的流
   OpenWrite)方法   打开一个流以将数据写入具有指定URI的资源
   UploadDataO方法   将数据缓冲区上传到具有指定URI的资源
   UploadFileO方法   将本地文件上传到具有指定URI的资源
   UploadStringO方法   将指定的字符串上传到指定的资源
   UploadValuesO方法   将名称/值集合上传到具有指定URI的资源

(1) 示例源码

(2)生成效果

5.WebRequest类和WebResponse

        WebRequest类是.NET Framework的请求/响应模型的抽象基类,用于访问Internet数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从Internet请求数据,在这种方式下,应用程序处理WebRequest类的实例,而协议特定的子类则执行请求的具体细节。

        WebResponse类也是抽象基类,应用程序可以使用WebResponse类的实例以协议不可知的方式参与请求和响应事务,而从WebResponse类派生的协议类携带请求的详细信息。另外,需要注意的是,客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。 

        WebRequest类的常用属性、方法及说明

属性及方法

说    明

ConnectionGroupName属性

    当在子类中重写时,获取或设置请求的连接组的名称

ContentLength属性

    当在子类中被重写时,获取或设置所发送的请求数据的内容长度

ContentType属性

    当在子类中被重写时,获取或设置所发送的请求数据的内容类型

Headers属性

    当在子类中被重写时,获取或设置与请求关联的报头名称/值对的集合

Method属性

    当在子类中被重写时,获取或设置要在此请求中使用的协议方法

RequestUri属性

    当在子类中被重写时,获取与请求关联的Internet资源的URI

Timeout属性

    获取或设置请求超时前的时间长度

Abot)方法

    中止请求

BeginGetResponse)方法

    当在子类中被重写时,开始对Intemet资源的异步请求

CreateO方法

    初始化新的WebRequest对象

EndGetResponseO方法

    当在子类中重写时,返回WebResponse对象

GetRequestStreamO方法

    当在子类中重写时,返回用于将数据写入Intemet资源的Stream

GetResponse)方法

    当在子类中被重写时,返回对Internet请求的响应

RegisterPrefixO方法

    为指定的URI注册WebRequest对象

        WebResponse类的常用属性、方法及说明

属性及方法

说    明

ContentLength 属性

当在子类中重写时,获取或设置接收的数据的内容长度

ContentType 属性

当在派生类中重写时,获取或设置接收的数据的内容类型

Headers 属性

当在派生类中重写时,获取与此请求关联的报头名称/值对的集合

ResponseUri 属性

当在派生类中重写时,获取实际响应此请求的Intemet 资源的 URI

Close)方法

 当由子类重写时,将关闭响应流

GetResponseStream)方法

 当在子类中重写时,从 Intenet 资源返回数据流

        客户端应用程序不直接创建WebResponse对象,而是通过对WebRequest实例调用GetResponse()方法来进行创建。

(1) 示例源码

(2)生成效果

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

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

相关文章

Unity Image - 镜像

1、为什么要使用镜像 在游戏开发过程中,我们经常会为了节省 美术图片资源大小,美术会将两边相同的图片进行切一半来处理。如下所示一个按钮 需要 400 * 236,然而美术只需要切一张 74*236的大小就可以了。这样一来图集就可以容纳更多的图片。…

基于spring boot电子商务系统

一、 系统总体结构设计 (一) 功能结构图 图1-1 后台管理子系统 图1-2 电子商务子系统功能结构图 (二) 项目结构目录截图(例如下图) 图 1-3 系统目录图 (三) 系统依赖截图 图 1-2 所有依赖截图 (四) 配置文件 1、 全局配置文件 2、 其他配置文…

《电磁场与电磁波》(谢处方第5版)anki卡片学习笔记txt文件输出

#separator:tab #html:true #tags column:9 矢量叉乘AB (用 A、 B的模表示具体的值) e nABsinθ 其中 e n为右手四个手指从矢量A到B旋转θ时大拇指的方向 矢量的叉积是否符合交换律和分配律 不符合交换律, A B- B A 但符合分配律 A(…

Leetcode226. 翻转二叉树

文章目录 题目介绍题目分析解题思路边界条件:节点为空时返回空子问题:交换左右子节点 整体代码 题目介绍 题目分析 题目要求我们将树中每个节点的左右子节点全部交换,最后返回交换后的树的根节点。 解题思路 这题是比较常见的递归,直接找边…

Simple_SSTI_1-WEB-bugku-解题步骤

——CTF解题专栏—— 声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。 题目信息: 题目:Simple_SSTI_1 作者:valecalida 提示:无 场景: 解题…

蓝桥杯day03——二进制间距

1.题目 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。 如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离…

oops-framework框架 之 创建项目(二)

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-game-kit 构建 本篇博客将使用oops-game-kit 构建一个新的开发项目, 关于 oops-framework 框架的了解,可参考上篇博客: oops-framework框架 之 初始了解(一) 大概…

dmesg命令在软件测试中的实际应用

简介:当你想要了解 Linux 系统在启动时究竟发生了什么?或者当硬件设备不工作时,如何进行调试?这就是 dmesg 命令的用武之地。本文将介绍 dmesg 的基本功能,并深入探讨其在软件测试中的实际应用。 历史攻略&#xff1a…

力扣题:字符串的反转-11.24

力扣题-11.24 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:151. 翻转字符串里的单词 解题思想:保存字符串中的单词即可 class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"&quo…

逆波兰表达式求值[中等]

优质博文:IT-BLOG-CN 一、题目 给你一个字符串数组tokens,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运算对象)都…

Qt路径和Anaconda中QT路径冲突(ubuntu系统)

最近做一个项目需要配置QT库,本项目配置环境如下: Qt version 5 Operating system, version and so on ubuntu 20.04 Description 之前使用过anaconda环境安装过QT5,所以在项目中CMakeLists文件中使用find_package时候,默认使用An…

【Linux】ubuntu配置SSH服务

要在Ubuntu上配置SSH服务,首先安装ssh-server sudo apt install openssh-server 安装完成后,可以检查一下是否安装成功 systemctl status ssh vim /etc/ssh/sshd_config 此时ubuntu就可以被远程连接工具连接了,如果我们想配置关于SCP服务允…

Angular中的单向和双向数据绑定

1、单向数据绑定: 单向数据绑定是指数据从组件流向视图或从视图流向组件,但数据的流动是单向的。 在Angular中,主要有以下两种形式的单向数据绑定: 从组件到视图(插值表达式): 使用插值表达式…

孩子兄弟表示法求叶子结点个数。

题目描述:孩子兄弟表示法求叶子结点个数。 分析: 孩子兄弟表示法有三部分:数据值、第一个孩子结点、相邻兄弟结点。据此定义进行递归。 int Leaves(BiTree T){if(T NULL)return 0;if(T->firstchild NULL)return 1 Leaves(T->nexts…

JVM运行时数据区域

文章目录 内存结构程序计数器(寄存器)虚拟机栈局部变量表两类异常状况 线程运行诊断 本地方法栈堆方法区运行时常量池串池(StringTable)字符串的拼接串池的位置StringTable垃圾回收StringTable性能调优 直接内存 内存结构 程序计…

(三)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法(TTA&#xf…

Overflow Aware Quantization

Overflow Aware Quantization Framework N o _o o​是 amount of arithmetic overflow 辅助信息 作者未提供代码

Windows-- 键盘操作+命令大全

F1           显示当前程序或者windows的帮助内容。 F2           当你选中一个文件的话,这意味着“重命名” F3           当你在桌面上的时候是打开“查找:所有文件” 对话框 F10或ALT        激活当前程…

A--Z与a--z的ASCII码的差异

从z到A还有一些字符 应该改为str[i]>A&&str[i]<Z||str[i]>a&&str[i]<z;

架构图是什么,怎么做?

架构图是一种用来描述系统或软件的结构和组成的图形表示。它展示了系统中各个组件之间的关系、交互和功能。通过绘制架构图&#xff0c;可以更好地理解和沟通系统的设计和实现。 绘制架构图的软件 目前市场上有许多用于绘制架构图的软件工具&#xff0c;下面简单…