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

C# 网络编程之最简单浏览器实现

最近学习C#网络编程的HTTP协议编程,HTTP即Hypertext Transfer Protocol的缩写,意为:超文本传输协议。

其中与HTTP相关的知识主要有六个类的知识,分别是

(1).HttpWebRequest类:用于获取和操作HTTP请求;

(2).HttpWebResponse类:用于获取和操作HTTP应答;

(3).WebRequest类:用于获取和操作Web请求;

(4).WebResponse类:用于获取和操作Web应答;

(5).Uri类:用于获取和操作网络资源位置;

(6).WebClient类:用于网络客户端操作.

下面主要是利用利用上面所述类的方法获取相应URL的应答内容,通过赋值数据流,再从字节流中读取内容赋值给webBrowser控件中实现最简单的浏览器,但内容虽少,但也体现了浏览器基本的一些操作和HTTP相关的网络编程知识。

一.界面设计

界面中添加label1”输入网址“,添加一个textBox作为输入的网址,添加button1其text属性为”浏览“。最重要的是添加一个webBrower控件,该控件指"允许用户在该控件中浏览网页",并且设置其Anchor属性(定义控件绑定到容器边缘)为Top、Bottom、Left、Right。这样点击全屏时能动态跟随变换的显示网页内容。

二.源代码

主要是点击”浏览“按钮生成相应的点击事件,在事件中添加相关浏览器代码即可实现,同时还要添加相应的命名空间。

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;
using System.IO;

namespace HttpWeb
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //双击"浏览"添加Click事件
        private void button1_Click(object sender, EventArgs e)
        {
            //获取输入的URL
            string url = textBox1.Text;

            //创建http链接
            //HttpWebRequest对象实例:该类用于获取和操作HTTP请求 var可改成HttpWebRequest
            var request = (HttpWebRequest)WebRequest.Create(url); //Create:创建WebRequest对象

            //HttpWebResponse对象实例:该类用于获取和操作HTTP应答 var可改成HttpWebResponse
            var response = (HttpWebResponse)request.GetResponse(); //GetResponse:获取答复

            //构造数据流对象实例
            Stream stream = response.GetResponseStream();//GetResponseStream:获取应答流
            StreamReader sr = new StreamReader(stream);  //从字节流中读取字符

            //从流当前位置读取到末尾并显示在WebBrower控件中
            string content = sr.ReadToEnd();
            webBrowser1.DocumentText = content;      
        }
    }
}

三.运行结果

输入http://www.baidu.com点击”浏览“按钮即可实现浏览百度网页,同时注意在输入URL中要加入"HTTP://”,它只是简单的实现,必然处理的方式都是按照基本语法解析。

点击“全屏”能如下显示:

但是在浏览时也有一些问题:一个是提示“没有权限”的脚本错误,另一个是浏览有的网站如我们的校内网时它的显示格式是错误的,我们有时上网也遇到过校内网这种错误的格式,这些都是我接下来需要思考的问题。同时,在浏览百度网站时我在IE中的状态是登录的,能显示我的用户名,而用该浏览器发现是未登录状态,这就证实了很多我们上网的信息是临时存储在Cookies或Session中的,这帮助我回顾了以前PHP课程中的内容。收藏一个网址:http://www.cnblogs.com/txw1958/archive/2012/09/24/CSharp-WebBrowser.html详细介绍了webbrowser控件,其中webBrowser1.Navigate(textBox1.Text.Trim());一句话即可实现浏览功能,而且不会出现ISO-8859-1乱码问题.

最后,通过这个例子能很好的了解一些HTTP网络编程知识,同时能实现简单的浏览器,如果有不足或错误的地方,希望大家海涵!希望这篇文章能帮组大家,同时也帮组了我自己。(BY:Eastmount 2013-7-26-早8点)

相关文章:

  • Win32_4深入浅出Win32的计时器
  • response.IsClientConnected参考
  • 参数化SQL小认识
  • Win32_5程序员求爱的创意程序^_^
  • cisco单臂路由
  • VC2010中 调用DLL的方法
  • Win32_6Win32的验证码程序
  • iOS Xcode, 解决“Could not insert new outlet connection”的问题。
  • Win32_7由浅入深——滚动条
  • 简单实现web服务器负载均衡
  • Android编程之ActivityManager: Segmentation fault
  • C# 网络编程之网页简单下载实现
  • mac 下对 iterm 终端 设置代理
  • 如何理解c和c++的复杂类型声明
  • silverlight中datagrid数据到处excel
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 11111111
  • Linux各目录及每个目录的详细介绍
  • mysql外键的使用
  • SOFAMosn配置模型
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 简析gRPC client 连接管理
  • 力扣(LeetCode)357
  • 实习面试笔记
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我这样减少了26.5M Java内存!
  • 源码安装memcached和php memcache扩展
  • 正则表达式小结
  • C# - 为值类型重定义相等性
  • HanLP分词命名实体提取详解
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • $.proxy和$.extend
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net反编译工具
  • .NET关于 跳过SSL中遇到的问题
  • .NET业务框架的构建
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [CTO札记]如何测试用户接受度?