C# Winform编程(9)网络编程
网络编程
- HTTP网络编程
- IPAddress IP地址类
- WebClient类
- WebRequest类和WebResponse类
- WebBrowser网页浏览器控件
- TCP网络编程
- TcpClient类
- TcpListener类
- NetworkStream类
- Socket类
HTTP网络编程
IPAddress IP地址类
IPAddress类代表IP地址,可在十进制表示法和实际的整数地址之间进行转换。IPHostEntry类封装了与主机相关的信息。Dns类可以检索IP地址和获取主机名。
域名解析示例:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;namespace NetWorkDemo
{public partial class FormDNS : Form{public FormDNS(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){IPHostEntry host = Dns.Resolve(textBox1.Text);foreach (IPAddress addr in host.AddressList){long ip = addr.Address;listBox1.Items.Add(addr.ToString());listBox1.Items.Add(ip.ToString());}textBox2.Text = host.HostName;textBox3.Text = IPAddress.Broadcast.ToString();}}
}

WebClient类
WebClient类提供用于将数据发送到由URI标识的资源及从这样的资源接收数据的常用方法。
WebClient类常用方法:
| 名称 | 说明 |
|---|---|
| DownloadString | 以字符串形式下载位于指定URI的资源 |
| OpenRead | 打开流向指定资源的可读流 |
| OpenWrite | 打开一个流,以将数据写入指定的资源。这些方法不会阻止调用线程 |
| UploadString | 将指定的字符串上载到指定的资源。这些方法不会阻止调用线程 |
WebClient类常用属性:
| 名称 | 说明 |
|---|---|
| IsBusy | 获取一个值,该值指示某一Web请求是否正在进行中 |
| BaseAddress | 获取或设置WebClient发出请求的基URI |
WebRequest类和WebResponse类
WebClient类的使用比较简单,单功能有限,而且不能提供身份验证相关信息。如果使用某种特定协议,需要结合使用WebReques类和WebResponse类。WebRequest类用于发出对一个URI的请求,是抽象类。
WebResquest类主要方法:
| 名称 | 说明 |
|---|---|
| Create() | 创建对象 |
| GetResponse() | 在子类中被重写时,返回对Internet请求的响应 |
| GetRequestStream() | 在子类中被重写时,返回用于将数据写入Internet资源的Stream |
WebResquest类主要属性:
| 名称 | 说明 |
|---|---|
| ContentLength | 在子类中被重写时,获取或设置所发送的请求数据的内容长度 |
| ContentType | 在子类中被重写时,获取或设置所发送的请求数据的内容类型 |
| Credentials | 在子类中被重写时,获取或设置用于对Internet资源请求进行身份验证的网络凭证 |
| Method | 在子类中被重写时,或取或设置要在此请求中使用的协议方法 |
| RequestUri | 获取与请求关联的Internet资源的URI |
| Headers | 在子类中被重写时,获取或设置与请求关联的表头名称/值对的集合 |
WebResponse类的主要成员:
| 名称 | 说明 |
|---|---|
| GetResponseStream | 在子类中被重写时,从Internet资源返回数据流 |
| ContentLength | 在子类中被重写时,获取或设置所发送的请求数据的内容长度 |
| ContentType | 在子类中被重写时,获取或设置所发送的请求数据的内容类型 |
| Headers | 在子类被重写时,获取或设置与请求关联的标头名称/值对的集合 |
下载文件和获取Header信息示例:
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace NetWorkDemo
{public partial class FormDownload : Form{public FormDownload(){InitializeComponent();}/// <summary>/// 下载文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){WebClient client = new WebClient();Stream s = client.OpenRead(textBox1.Text);StreamReader reader = new StreamReader(s);richTextBox1.Text = reader.ReadToEnd();reader.Close();s.Close();}/// <summary>/// 获取Header头信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){HttpWebRequest req = (HttpWebRequest)WebRequest.Create(textBox1.Text);HttpWebResponse res = (HttpWebResponse)req.GetResponse();NameValueCollection headers = res.Headers;foreach (string name in headers){listBox1.Items.Add(name + "------" + headers[name]);}}}
}

WebBrowser网页浏览器控件
将WebBrowser控件拖拽到窗体上。设置网页地址即可浏览网页:
webBrowser1.Navigate(“www.baidu.com”, false);
TCP网络编程
System.Net.Sockets命名空间包含了一些相关类,允许直接发送TCP网络请求或者某个端口监听TCP网络请求。
System.Net.Sockets命名空间:
类:
| 名称 | 说明 |
|---|---|
| Socket | 实现套接字接口 |
| SocketException | 发生套接字错误时引发的异常 |
| TcpClient | 为TCP网络服务提供客户端连接 |
| TcpListener | 从TCP网络客户端侦听连接 |
| UdpClient | 提供用户数据协议(UDP)网络服务 |
枚举
| 名称 | 说明 |
|---|---|
| AddressFamily | 指定Socket类的实例可以使用的寻找方案 |
| ProtocolFamily | 指定Socket类的实例可以使用的协议类型 |
| PortocolType | 指定Socket类支持的协议 |
| SocketFlags | 指定套接字的发送和接收行为 |
| SocketOptionLevel | 为Socket.SetSocketOption和Socket.GetSocketOption方法定义套接字选项级别 |
TcpClient类
主要使用TcpClient类为TCP网络服务提供连接,包括相关属性和方法来控制连接,通过对流对象添加读写功能。
TcpClient类的主要方法:
| 名称 | 说明 |
|---|---|
| Connect | 使用指定的主机名和端口号将客户端连接到TCP主机 |
| GetStream | 返回用于发送和接收数据的NetworkStream |
| Close | 释放此TcpClient实例,而不关闭基础连接 |
TcpClient类的主要属性:
| 名称 | 说明 |
|---|---|
| Client | 获取或设置基础Socket |
| SendTimeout | 发送操作超时时间 |
| SendBufferSize | 获取或设置发送缓冲区的大小 |
| ReceiveTimeout | 接收操作超时时间 |
| ReceiveBufferSize | 获取或设置接收缓冲区的大小 |
TcpListener类
TcpListener类用于监听和接收连接请求,主要方法:
| 方法 | 说明 |
|---|---|
| Start | 开始侦听传入的连接请求 |
| AcceptSocket | 接受挂起的连接请求 |
| Stop | 关闭侦听器 |
NetworkStream类
传输数据时主要使用了NetworkStream类,它代表的是网络中传输的数据流,在发生会接收数据时,可从流中获取字节数据或对应的字符串。
NetworkStream类的主要方法:
| 名称 | 说明 |
|---|---|
| Read() | 从NetworkStream读取数据 |
| ReadByte() | 从流中读取一个字节,并将流内的位置向前推进一个字节,已到达流的末尾,则返回-1 |
| Write() | 将数据写入NetworkStream |
| WriteByte() | 将一个字节写入流的当前位置,并将流内的位置向前推进一个字节 |
NetworkStream类的主要属性:
| 名称 | 说明 |
|---|---|
| Length | 获取流上可用数据的长度 |
| Socket | 获取基础Socket |
服务端:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace NetWorkDemo
{public partial class FormTCPRecv : Form{public FormTCPRecv(){InitializeComponent();}private TcpListener listen;private NetworkStream netstream;/// <summary>/// 启动/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){listen = new TcpListener(9999);listen.Start();listBox1.Items.Add("服务器启动");Socket socket = listen.AcceptSocket();netstream = new NetworkStream(socket);}/// <summary>/// 接收/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){if (netstream.DataAvailable){byte[] getdata = new byte[1024];int length = netstream.Read(getdata, 0, getdata.Length);string msg = Encoding.Default.GetString(getdata, 0, length);listBox1.Items.Add("收到客户端消息");listBox1.Items.Add(msg);}}}
}
客户端:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace NetWorkDemo
{public partial class FormTCPSender : Form{public FormTCPSender(){InitializeComponent();}private NetworkStream netstream;private void button1_Click(object sender, EventArgs e){TcpClient client = new TcpClient();client.Connect("localhost", 9999);netstream = client.GetStream();if (textBox1.Text.Trim() == ""){MessageBox.Show("消息不能为空");return;}else{byte[] senddata = Encoding.Default.GetBytes(textBox1.Text);netstream.Write(senddata, 0, senddata.Length);netstream.Flush();}netstream.Close();}}
}
Socket类
Socket实例包含了一个本地或者一个远程端点的套接字信息,Socket类的主要成员:
Socket类的主要方法:
| 名称 | 说明 |
|---|---|
| Connect | 建立与远程主机的连接 |
| Close | 关闭Scket连接并释放所有关联的资源 |
| Listen | 将Socket置于侦听状态 |
| Receive | 接收来自绑定的Socket的数据 |
| Send | 将数据发送到连接的Socket |
Socket类的主要属性:
| 名称 | 说明 |
|---|---|
| AddressFamily | 获取Socket的地址族 |
| Available | 获取已经从网络接收且可供读取的数据量 |
| Connected | 获取一个值,该值表明套接字是否与最后完成发送或接收操作的远程设备得到连接 |
| ProtocolType | 获取Socket的协议类型 |
| RemoteEndPoint | 获取远程端点 |
| SendTimeout | 发送超时时间 |
| SocketType | 获取Socket的类型 |
| ReceiveBufferedSize | 获取或设置Socket接收缓冲区的大小 |
Socket类的构造函数:
public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);
相关文章:
C# Winform编程(9)网络编程
网络编程 HTTP网络编程IPAddress IP地址类WebClient类WebRequest类和WebResponse类 WebBrowser网页浏览器控件TCP网络编程TcpClient类TcpListener类NetworkStream类Socket类 HTTP网络编程 IPAddress IP地址类 IPAddress类代表IP地址,可在十进制表示法和实际的整数…...
RabbitMQ中方法channel.basicAck的使用说明
方法channel.basicAck的作用 在RabbitMQ中,channel.basicAck方法用于确认已经接收并处理了消息。 方法的参数说明 public void basicAck(long deliveryTag,boolean multiple) 参数: long deliveryTag 消息的唯一标识。每条消息都有自己的ID号&#x…...
Jenkins+Python自动化测试持续集成详细教程
Jenkins安装 Jenkins安装 Jenkins是一个开源的软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。由于是基于java开发因此它也依赖java环境&…...
Lightroom学习之路
基础知识 常用快捷键 双击修改图片下右边布局的属性,快速回到初始值 B站学习笔记 1、导入到图库为图片标星级,后期优先处理星级高的图片 2、修改照片-基础-白平衡有吸管吸颜色会自动平衡照片颜色 3、直方图左右上角三角形,选中后照片会显示…...
Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释
后端采用Abp框架,当前最新版本是7.4.0。 数据库使用MySQL,在执行数据库迁移时,写在Domain层的Entity类上的注释通通都没有,这样查看数据库字段的含义时,就需要对照代码来看,有些不方便。今天专门来解决这个…...
传智教育研究院重磅发布Java学科新研发《智慧养老》项目
在招聘Java开发人才的过程中,企业往往对候选人的项目经验有着严格的要求,项目经验成为顺利就业的重要敲门砖之一。而在数字化技术的学习中,如何让学员通过项目课程有效地积累实战开发经验,就成了数字化技术职业教育的一个重大难点…...
Fiddler抓包VSCode和探索
前言: 最近在使用 VSCode 调试 web 程序时,遇到一些问题,当时不知道如何是好。所以决定抓看来看一看,然后一顿操作猛如虎,成功安装了抓包软件 – Fiddler Classic。我并没有使用 Postman 这种重量级的 HTTP 测试软件&a…...
Pytorch指定数据加载器使用子进程
torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue,num_workers4, pin_memoryTrue) num_workers 参数是 DataLoader 类的一个参数,它指定了数据加载器使用的子进程数量。通过增加 num_workers 的数量,可以并行地读取和预处…...
【科普】干货!带你从0了解移动机器人(六) (底盘结构类型)
牵引式移动机器人(AGV/AMR),通常由一个牵引车和一个或多个被牵引的车辆组成。牵引车是机器人的核心部分,它具有自主导航和定位功能,可以根据预先设定的路径或地标进行导航,并通过传感器和视觉系统感知周围环…...
爆肝整理,Pytest+Allure+Jenkins自动化测试集成实战(图文详细步骤)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、简介 pytesta…...
微信批量添加好友,让你的人脉迅速增长
在这个数字化时代,微信作为中国最流行的社交平台之一,已经成为了人们生活中不可或缺的一部分。它的广泛使用为我们提供了无限的社交可能性。你是否曾为了扩大人脉圈子而犯愁?今天,我将向你揭示一个高效添加微信好友的秘密武器&…...
3D模型怎么贴法线贴图?
1、法线贴图的原理? 法线贴图(normal mapping)是一种计算机图形技术,用于在低多边形模型上模拟高多边形模型的细节效果。它通过在纹理坐标上存储和应用法线向量的信息来实现。 法线贴图的原理基于光照模型。在渲染过程中&#x…...
QT中文乱码解决方案与乱码的原因
相信大家应该都遇到过中文乱码的问题,有时候改一改中文就不乱码了,但是有时候用同样的方式还是乱码,那么这个乱码到底是什么原因,又该如何彻底解决呢? 总结 先总结一下: Qt5中,将QString()的构…...
sam9x60 boot
...
3D模型格式转换工具HOOPS Exchange:支持国际标准STEP格式!
HOOPS Exchange SDK是一组C软件库,使开发团队能够快速将可靠的2D和3D CAD导入和导出添加到其应用程序中,访问广泛的数据,包括边界表示 (B-REP)、产品制造信息 (PMI)、模型树、视图、持久 ID、样式、构造几何、可视化等,无需依赖任…...
java--死循环与循环嵌套
1.死循环 可以一直执行下去的一种循环,如果没有干预不会停下来的 2.死循环的写法 3.循环嵌套 循环中又包含循环 4.循环嵌套的特点 外部循环每循环一次,内部循环会全部执行完一轮...
基于机器视觉的图像拼接算法 计算机竞赛
前言 图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,…...
基于arduino uno + L298 的直流电机驱动proteus仿真设计
一、L298简介: L298是一个集成的单片电路,采用15个导线多瓦和PowerSO20封装。它是一个高电压、高电流双全桥驱动器,旨在接受标准TTL逻辑电平和驱动感应负载,如继电器、螺线管、直流和加速电机。提供两个使输入来使独立于输入信号的…...
cola架构:有限状态机(FSM)源码分析
目录 0. cola状态机简述 1.cola状态机使用实例 2.cola状态机源码解析 2.1 语义模型源码 2.1.1 Condition和Action接口 2.1.2 State 2.1.3 Transition接口 2.1.4 StateMachine接口 2.2 Builder模式 2.2.1 StateMachine Builder模式 2.2.2 ExternalTransitionBuilder-…...
通信仿真软件SystemView安装教程(超详细)
介绍 system view是一种电子仿真工具。它是一个信号级的系统仿真软件,主要用于电路与通信系统的设计和仿真,是一个强有力的动态系统分析工具,能满足从数字信号处理,滤波器设计,直到复杂的通信系统等不同层次的设计&am…...
Qwen2.5-Coder-1.5B代码修复实战:常见Bug自动诊断与修复
Qwen2.5-Coder-1.5B代码修复实战:常见Bug自动诊断与修复 你有没有过这样的经历?深夜赶项目,代码跑起来一堆红字,对着报错信息一头雾水,查了半天文档还是找不到问题在哪。或者,接手一个老项目,里…...
颈腰椎病引发 “耳后疼痛”:耳根刺痛,可能是颈椎在 “捣乱”
很多人出现耳后持续性刺痛或按压痛,会误以为是中耳炎、腮腺炎,实则部分耳后疼痛与颈椎病变相关。颈椎病变压迫枕大神经(从颈椎延伸至耳后),会导致神经分布区域疼痛;同时颈椎肌肉痉挛、僵硬,牵拉…...
PVB于EVA胶片的区别
PVB于EVA胶片的区别实例:PVB用于封装“双玻璃光伏组件”:玻璃+PVB+电池片+PVB+玻璃,PVB胶片已取代EVA胶片。为什么用PVB,不像我们现在一样用EVA?因为: 在玻璃…...
OpenClaw+GLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合
OpenClawGLM-4.7-Flash极客玩法:浏览器自动化与RPA任务融合 1. 当OpenClaw遇见GLM-4.7-Flash 去年冬天的一个深夜,我正为重复性的网页数据抓取任务头疼不已。Selenium脚本频繁因页面结构变化而崩溃,每次都需要人工介入调整。直到发现OpenCl…...
SDXL-Turbo在虚拟现实中的应用:实时环境生成技术
SDXL-Turbo在虚拟现实中的应用:实时环境生成技术 想象一下,在虚拟世界中每走一步,周围的景色就随之变化——茂密的森林在你眼前生长,古老的城堡在远处拔地而起,这一切都发生在眨眼之间。这不是魔法,而是SDX…...
NaViL-9B部署案例:中小企业用双24GB显卡替代A100实现降本增效
NaViL-9B部署案例:中小企业用双24GB显卡替代A100实现降本增效 1. 项目背景与价值 在AI大模型应用日益普及的今天,中小企业面临着高昂的硬件投入成本。传统部署方案通常需要A100等高端显卡,单卡价格动辄数万元,让许多企业望而却步…...
从数据包到DMA:图解GMAC传输描述符的完整生命周期(含TSO/VLAN案例)
从数据包到DMA:图解GMAC传输描述符的完整生命周期(含TSO/VLAN案例) 在网络硬件加速领域,GMAC(Gigabit Media Access Control)接口的传输描述符机制是提升数据吞吐效率的核心技术之一。本文将深入剖析一个网…...
达摩院PALM春联模型多场景落地:政务大厅自助春联机解决方案
达摩院PALM春联模型多场景落地:政务大厅自助春联机解决方案 春节贴春联,是咱们中国人传承千年的文化习俗。一副好春联,不仅承载着对新年的美好祝愿,也体现着家庭的品味和格调。但你知道吗?现在写春联这件事࿰…...
OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环
OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫分析闭环 1. 为什么需要自动化任务编排 去年我接手了一个市场调研项目,需要每周从20多个网站抓取产品价格数据,清洗后生成趋势图表。最初用Python脚本手动Excel处理,每次要花3小时…...
LeetCode 153. 旋转排序数组找最小值:二分最优思路
LeetCode中等难度的经典题目——153. 寻找旋转排序数组中的最小值。这道题的核心考点是「二分查找」,难点在于如何利用“旋转排序数组”的特性,在O(log n)时间复杂度内找到最小值,也是面试中常考的二分变形题。 一、题目解读:读懂…...
