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

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地址&#xff0c;可在十进制表示法和实际的整数…...

RabbitMQ中方法channel.basicAck的使用说明

方法channel.basicAck的作用 在RabbitMQ中&#xff0c;channel.basicAck方法用于确认已经接收并处理了消息。 方法的参数说明 public void basicAck(long deliveryTag,boolean multiple) 参数&#xff1a; long deliveryTag 消息的唯一标识。每条消息都有自己的ID号&#x…...

Jenkins+Python自动化测试持续集成详细教程

Jenkins安装 Jenkins安装 ​ Jenkins是一个开源的软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件的持续集成变成可能。由于是基于java开发因此它也依赖java环境&…...

Lightroom学习之路

基础知识 常用快捷键 双击修改图片下右边布局的属性&#xff0c;快速回到初始值 B站学习笔记 1、导入到图库为图片标星级&#xff0c;后期优先处理星级高的图片 2、修改照片-基础-白平衡有吸管吸颜色会自动平衡照片颜色 3、直方图左右上角三角形&#xff0c;选中后照片会显示…...

Day 2 Abp框架下,MySQL数据迁移时,添加表和字段注释

后端采用Abp框架&#xff0c;当前最新版本是7.4.0。 数据库使用MySQL&#xff0c;在执行数据库迁移时&#xff0c;写在Domain层的Entity类上的注释通通都没有&#xff0c;这样查看数据库字段的含义时&#xff0c;就需要对照代码来看&#xff0c;有些不方便。今天专门来解决这个…...

传智教育研究院重磅发布Java学科新研发《智慧养老》项目

在招聘Java开发人才的过程中&#xff0c;企业往往对候选人的项目经验有着严格的要求&#xff0c;项目经验成为顺利就业的重要敲门砖之一。而在数字化技术的学习中&#xff0c;如何让学员通过项目课程有效地积累实战开发经验&#xff0c;就成了数字化技术职业教育的一个重大难点…...

Fiddler抓包VSCode和探索

前言&#xff1a; 最近在使用 VSCode 调试 web 程序时&#xff0c;遇到一些问题&#xff0c;当时不知道如何是好。所以决定抓看来看一看&#xff0c;然后一顿操作猛如虎&#xff0c;成功安装了抓包软件 – Fiddler Classic。我并没有使用 Postman 这种重量级的 HTTP 测试软件&a…...

Pytorch指定数据加载器使用子进程

torch.utils.data.DataLoader(train_dataset, batch_sizebatch_size, shuffleTrue,num_workers4, pin_memoryTrue) num_workers 参数是 DataLoader 类的一个参数&#xff0c;它指定了数据加载器使用的子进程数量。通过增加 num_workers 的数量&#xff0c;可以并行地读取和预处…...

【科普】干货!带你从0了解移动机器人(六) (底盘结构类型)

牵引式移动机器人&#xff08;AGV/AMR&#xff09;&#xff0c;通常由一个牵引车和一个或多个被牵引的车辆组成。牵引车是机器人的核心部分&#xff0c;它具有自主导航和定位功能&#xff0c;可以根据预先设定的路径或地标进行导航&#xff0c;并通过传感器和视觉系统感知周围环…...

爆肝整理,Pytest+Allure+Jenkins自动化测试集成实战(图文详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、简介 pytesta…...

微信批量添加好友,让你的人脉迅速增长

在这个数字化时代&#xff0c;微信作为中国最流行的社交平台之一&#xff0c;已经成为了人们生活中不可或缺的一部分。它的广泛使用为我们提供了无限的社交可能性。你是否曾为了扩大人脉圈子而犯愁&#xff1f;今天&#xff0c;我将向你揭示一个高效添加微信好友的秘密武器&…...

3D模型怎么贴法线贴图?

1、法线贴图的原理&#xff1f; 法线贴图&#xff08;normal mapping&#xff09;是一种计算机图形技术&#xff0c;用于在低多边形模型上模拟高多边形模型的细节效果。它通过在纹理坐标上存储和应用法线向量的信息来实现。 法线贴图的原理基于光照模型。在渲染过程中&#x…...

QT中文乱码解决方案与乱码的原因

相信大家应该都遇到过中文乱码的问题&#xff0c;有时候改一改中文就不乱码了&#xff0c;但是有时候用同样的方式还是乱码&#xff0c;那么这个乱码到底是什么原因&#xff0c;又该如何彻底解决呢&#xff1f; 总结 先总结一下&#xff1a; Qt5中&#xff0c;将QString()的构…...

sam9x60 boot

...

3D模型格式转换工具HOOPS Exchange:支持国际标准STEP格式!

HOOPS Exchange SDK是一组C软件库&#xff0c;使开发团队能够快速将可靠的2D和3D CAD导入和导出添加到其应用程序中&#xff0c;访问广泛的数据&#xff0c;包括边界表示 (B-REP)、产品制造信息 (PMI)、模型树、视图、持久 ID、样式、构造几何、可视化等&#xff0c;无需依赖任…...

java--死循环与循环嵌套

1.死循环 可以一直执行下去的一种循环&#xff0c;如果没有干预不会停下来的 2.死循环的写法 3.循环嵌套 循环中又包含循环 4.循环嵌套的特点 外部循环每循环一次&#xff0c;内部循环会全部执行完一轮...

基于机器视觉的图像拼接算法 计算机竞赛

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…...

基于arduino uno + L298 的直流电机驱动proteus仿真设计

一、L298简介&#xff1a; L298是一个集成的单片电路&#xff0c;采用15个导线多瓦和PowerSO20封装。它是一个高电压、高电流双全桥驱动器&#xff0c;旨在接受标准TTL逻辑电平和驱动感应负载&#xff0c;如继电器、螺线管、直流和加速电机。提供两个使输入来使独立于输入信号的…...

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是一种电子仿真工具。它是一个信号级的系统仿真软件&#xff0c;主要用于电路与通信系统的设计和仿真&#xff0c;是一个强有力的动态系统分析工具&#xff0c;能满足从数字信号处理&#xff0c;滤波器设计&#xff0c;直到复杂的通信系统等不同层次的设计&am…...

如何用torchtext快速构建文本分类模型?5分钟上手RoBERTa与T5实战教程

如何用torchtext快速构建文本分类模型&#xff1f;5分钟上手RoBERTa与T5实战教程 【免费下载链接】text Models, data loaders and abstractions for language processing, powered by PyTorch 项目地址: https://gitcode.com/gh_mirrors/te/text 想要在PyTorch生态中快…...

DeOldify开源贡献指南:如何参与项目改进与代码提交

DeOldify开源贡献指南&#xff1a;如何参与项目改进与代码提交 想为DeOldify这个酷炫的图片上色项目添砖加瓦&#xff0c;但又觉得开源贡献这事儿门槛太高&#xff0c;不知道从何下手&#xff1f;别担心&#xff0c;你绝对不是一个人。很多人对开源既向往又畏惧&#xff0c;总…...

HTML网页元素中的图片和超链接

哈哈哈&#xff0c;又来更新我这一周里面新学的web前端开发技术啦&#xff01;今天我将与大家分享网页元素中的图片和超链接。一.图像的应用HTML中加入图片有3种不同的路径&#xff1a;1.绝对路径&#xff1a;是指互联网上唯一且完整的地址&#xff0c;用来精准定位资源。绝对路…...

Meshery 1.0正式发布,为云原生基础设施提供新的管控层

跨多云环境管理Kubernetes基础设施长期以来产生了YAML文件泛滥、配置漂移以及依赖个人而非系统的知识问题。生成基础设施配置的AI工具速度超过了团队审查能力&#xff0c;使这个问题更加难以控制。开源Meshery技术正是为了解决这一问题而构建的。Meshery v1.0现已发布&#xff…...

C#异步编程完全指南:async/await背后的状态机原理

# C#异步编程完全指南&#xff1a;async/await背后的状态机原理## 引言在现代软件开发中&#xff0c;异步编程已成为构建高响应、高吞吐量应用程序的基石。C# 作为一门不断演进的现代编程语言&#xff0c;从 .NET Framework 4.5 开始引入了 async 和 await 关键字&#xff0c;彻…...

3D元器件库技术解析与工程应用指南

## 1. 3D元器件库技术解析与应用指南### 1.1 3D封装库的技术价值 在现代电子设计自动化(EDA)流程中&#xff0c;高质量的3D元器件库可显著提升设计效率。本套封装库包含1088个标准封装模型&#xff0c;涵盖电阻器、电容器、接线端子、IC芯片、晶振等常见电子元件&#xff0c;所…...

基于微信小程序实现马拉松报名系统【附项目源码+论文说明】

基于java和微信小程序实现马拉松报名系统演示【内附项目源码LW说明】摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了马拉松报名系统微信小程序的开发全过程。通过分析马拉松报名系统微信小程序管理的不足&…...

揭秘League Akari:如何通过LCU API革新英雄联盟游戏体验?

揭秘League Akari&#xff1a;如何通过LCU API革新英雄联盟游戏体验&#xff1f; 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...

突破Windows多显示器显示壁垒:SetDPI重新定义显示体验

突破Windows多显示器显示壁垒&#xff1a;SetDPI重新定义显示体验 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 在当今多设备协同工作的时代&#xff0c;显示器已成为我们与数字世界交互的重要窗口。然而&#xff0c;当程序员小李将笔…...

Next AI Draw.io:从自然语言到专业图表,AI如何重塑技术绘图工作流

1. 当技术绘图遇上AI&#xff1a;一场效率革命 上周三凌晨两点&#xff0c;我还在为一个客户紧急赶制系统架构图。传统绘图工具里反复拖拽调整的机械操作&#xff0c;让我的咖啡消耗量达到了平日的三倍。直到偶然发现Next AI Draw.io这个神器——用一句"生成包含负载均衡和…...