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);

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

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

相关文章

第十三章 枚举类型与泛型总结

13.1 枚举类型 枚举类型是一种特殊的数据类型&#xff0c;它允许一个变量只能取预先定义好的一组离散值中的一个。在许多编程语言中&#xff0c;枚举类型通常用于表示具有一定范围内固定取值的情况&#xff0c;例如星期几、月份等。 13.1.1使用枚举类型设置常量 在Java中&am…

【linux系统】服务器安装Pycharm

文章目录 安装pycharm步骤1. 进入pycharm官网2. 上传到服务器3. 安装过程 摘要&#xff1a;pycharm是Python语言的图形化开发工具。因为如果在Linux环境下的Python shell 中直接进行编程&#xff0c;其无法保存与修改&#xff0c;在大型项目当中这是很不方便的&#xff0c;而py…

大学兼职教师管理系统 用JAVA语言开发

一、项目介绍 基于VueSpringBootMySQL的大学兼职教师管理系统包含学生管理、教师管理、课程档案管理、课程评价管理、课程考勤管理、授课管理、课程成绩管理教龄/薪资分析可视化图表&#xff0c;还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管…

13.4web自动化测试(Selenium3+Java)

一.定义 用来做web自动化测试的框架. 二.特点 1.支持各种浏览器. 2.支持各种平台(操作系统). 3.支持各种编程语言. 4.有丰富的api. 三.工作原理 四.搭环境 1.对照Chrome浏览器版本号,下载ChromeDriver,配置环境变量,我直接把.exe文件放在了jdk安装路径的bin文件夹下了(j…

【剑指Offer】:循环有序列表的插入(涉及链表的知识)

给定循环单调非递减列表中的一个点&#xff0c;写一个函数向这个列表中插入一个新元素 insertVal &#xff0c;使这个列表仍然是循环升序的 给定的可以是这个列表中任意一个顶点的指针&#xff0c;并不一定是这个列表中最小元素的指针 如果有多个满足条件的插入位置&#xff0c…

IMU预积分的过程详解

一、IMU和相机数据融合保证位姿的有效性&#xff1a; 当运动过快时&#xff0c;相机会出现运动模糊&#xff0c;或者两帧之间重叠区域太少以至于无法进行特征匹配&#xff0c;所以纯视觉SLAM对快速的运动很敏感。而有了IMU&#xff0c;即使在相机数据无效的那段时间内&#xff…

postman接收后端返回的文件流并自动下载

不要点send&#xff0c;点send and download&#xff0c;postman接受完文件流会弹出文件保存框让你选择保存路径

触摸屏与施耐德PLC之间MODBUS无线通讯

一、 硬件连接 1、PLC通讯接口说明&#xff1a; 2、通讯电缆图&#xff1a; 二、PLC设置 1. 配置端口&#xff1a; 双击串行线路—弹出右侧设置窗口---设置串口通讯参数 2. 添加MODBUS协议。 ① 右击串口线路&#xff0c;选择添加设备&#xff1a; ② 选择现场总线&#xf…

小知识(6) el-table表格选中行和回显行(vue3)

el-table表格选中行和回显行 官方文档说明 https://element-plus.org/zh-CN/component/table.html#table-%E6%96%B9%E6%B3%95 环境&#xff1a;vue3element-plus 选中行selection <el-table ref"baseTableRef" row-key"id" border :selection"tr…

Spring无法加载静态属性和SpringBoot单元测试指定加载配置文件

一、Spring无法加载静态属性&#xff0c;怎么解决&#xff1f; Spring主要用于管理和注入Bean&#xff08;对象&#xff09;的实例属性&#xff0c;而不是静态属性。静态属性属于类本身&#xff0c;而不是类的实例&#xff0c;因此Spring的依赖注入机制不会处理它们。 看图&a…

华为云2023年双十一服务器优惠价格表及活动大全

2023华为云双11优惠活动「云上优选 特惠来袭」&#xff0c;阿腾云atengyun.com整理云服务器优惠价格表&#xff0c;华为云L实例-2核2G3M一年优惠价89元、L实例-2核2G4M价格108元一年、L实例-2核4G5M优惠价198元一年&#xff0c;三年1000元、HECS云服务器-1核2G1M带宽39元一年、…

rabbitmq-3.8.15集群、集群镜像模式安装部署

目录 一、环境 1、映射、域名、三墙 2、Erlang和socat安装&#xff08;三台服务器都实行&#xff09; 二、部署三台rabbitmq-3.8.15实例 1、rabbitmq官网下载地址 &#xff1a; 2、解压rabbitmq 3、添加系统变量 4、启动web插件、启动rabbitmq 5、在rabbitmq1上添加用…

文件系统的层次结构,全局结构,虚拟文件系统VFS以及文件挂载

1.文件系统的层次结构 1.用户接口 文件系统需要向上层的用户提供一些简单易用的功能接口。 这层就是用于处理用户发出的系统调用请求&#xff08;Read、Write、Open、Close等系统调用) 2.文件目录系统 用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径…

shopee商品链接获取shopee商品评论数据(用 Python实现shopee商品评论信息抓取)

在网页抓取方面&#xff0c;可以使用 Python、Java 等编程语言编写程序&#xff0c;通过模拟 HTTP 请求&#xff0c;获取shopee网站上的商品详情页面评论内容。在数据提取方面&#xff0c;可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#…

【数据结构】数组和字符串(二):特殊矩阵的压缩存储:对角矩阵——一维数组

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储结构体初始化元素设置元素获取打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串&#xff08;一&#xff09;&#xff1a;矩阵的数组表示 4.2.2 特殊矩阵的压缩存储…

二十、设计模式之迭代器模式

目录 二十、设计模式之迭代器模式能帮我们干什么&#xff1f;主要解决什么问题&#xff1f;优缺点优点缺点&#xff1a; 使用的场景角色 实现迭代器模式定义迭代器容器实现可迭代接口迭代器实现使用 总结 二十、设计模式之迭代器模式 所属类型定义行为型提供一种方法顺序访问一…

jvm垃圾回收算法有哪些及原理

目录 垃圾回收器1 Serial收集器2 Parallel收集器3 ParNew收集器4 CMS收集器5 G1回收器三色标记算法标记算法的过程三色标记算法缺陷多标漏标 垃圾回收器 垃圾回收机制&#xff0c;我们已经知道什么样的对象会成为垃圾。对象回收经历了什么——垃圾回收算法。那么谁来负责回收垃…

CodeFormer和GFPGAN的本地部署与效果对比

CodeFormer和GFPGAN是两个图片人脸修复的开源程序&#xff0c;两个程序不相伯仲&#xff0c;效果都非常棒&#xff0c;在stable diffusion中这两个插件都有集成进去&#xff01;我们今天就将这两个程序的本地独立安装和使用方法记录一下&#xff01; CodeFormer github主页地址…

单片机设计基于STM32的空气净化器设计

**单片机设计介绍&#xff0c;1615[毕设课设]基于STM32的空气净化器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图pcb设计图 五、 程序六、 文章目录 一 概要 此设计资料主要包含原理图、PCB、源程序、元器件清等资料&#xff0c; 二、功能设计 设计思路 …

基于C/C++的UG二次开发流程

文章目录 基于C/C的UG二次开发流程1 环境搭建1.1 新建工程1.2 项目属性设置1.3 添加入口函数并生成dll文件1.4 执行程序1.5 ufsta入口1.5.1 创建程序部署目录结构1.5.2 创建菜单文件1.5.3 设置系统环境变量1.5.4 制作对话框1.5.5 创建代码1.5.6 部署和执行 基于C/C的UG二次开发…