C# Winform编程(9)网络编程-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

网络编程

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6