当前位置:首页 > 编程笔记 > 正文
已解决

C# Winform编程(9)网络编程

来自网友在路上 172872提问 提问时间:2023-10-27 15:26:01阅读次数: 72

最佳答案 问答题库728位专家为你答疑解惑

网络编程

  • 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资源的URIHeaders在子类中被重写时,获取或设置与请求关联的表头名称/值对的集合

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返回用于发送和接收数据的NetworkStreamClose释放此TcpClient实例,而不关闭基础连接

TcpClient类的主要属性:

名称说明Client获取或设置基础SocketSendTimeout发送操作超时时间SendBufferSize获取或设置发送缓冲区的大小ReceiveTimeout接收操作超时时间ReceiveBufferSize获取或设置接收缓冲区的大小

TcpListener类

TcpListener类用于监听和接收连接请求,主要方法:

方法说明Start开始侦听传入的连接请求AcceptSocket接受挂起的连接请求Stop关闭侦听器

NetworkStream类

传输数据时主要使用了NetworkStream类,它代表的是网络中传输的数据流,在发生会接收数据时,可从流中获取字节数据或对应的字符串。
NetworkStream类的主要方法:

名称说明Read()从NetworkStream读取数据ReadByte()从流中读取一个字节,并将流内的位置向前推进一个字节,已到达流的末尾,则返回-1Write()将数据写入NetworkStreamWriteByte()将一个字节写入流的当前位置,并将流内的位置向前推进一个字节

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

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C# Winform编程(9)网络编程":http://eshow365.cn/6-26139-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!