C#心路-第二篇-WebSite原理-网站的工作机制,协议协议!

本想多扯点篇幅,但是心中总结的核心内容却已经迫不及待的想要分享给大家了.

又但是知识是系统的,要现在就开始讲高级的,我想隔段时间我自己再看,也会很难明白.

好,这一讲工作机制,总而言之就是 “协议协议!”

那么你们现在想到哪些协议?

这个就是我们这讲的功课了,找到的请回复到这里.

OK,继续.

网站的结构:client <—(http等协议)-->service

前一讲我们已经知道了,打开网页就是把服务器的网页文件复制到客户端再通过浏览器打开,

OK,我们一步步来分析。

首先是客户端--浏览器,最常用的就是IE了,其次还有FF,GG等.

你要有兴趣的话,你自己也可以开发一个.当然我这里说的不是用Asp.net里的webbrowse控件组装个.

而是说完全的自己开发.

大家会不会觉得这非常困难,其实这?… 当然这非常困难,难在哪里?

我们不能因为没做过,不了解就觉得难就害怕它,而不去了解它.不光是做软件,而是做任何事都一样。

当我们了解足够了才能分析它,分析它的可行程度以及难点.

那么浏览器的难点在哪里?

我个人的理解是在于 Html,Css,Script等的解析以及呈现.请参照现在流行的 XHTML 1.0 标准.

解析很难,确实很难,但是我们只是要了解网站的工作机制,可以不涉及或者少量涉及到解析,那么就简单了。

剩下的功能大概分为如下几块:

1:通信层

2:界面

我尝试做了下,通讯层核心代码如下:

public string DownloadingString(string url)
        {
            StringBuilder Html = new StringBuilder();
            Uri link = new Uri(url);

            using (Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp | ProtocolType.IP))
            {
                sk.Connect(link.Host, link.Port);

                if (sk.Connected)
                {
                    //万能的字符串 协议都是拼和解析字符串
                    string getstr = @"GET " + link.PathAndQuery + @" HTTP/1.1
Host:" + link.Host + @"
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: " + DateTime.Now.ToString() + @"

";
                    byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(getstr);
                    sk.Send(bs);

                    byte[] rs = new byte[2048];
                    List<byte> lsbs = new List<byte>();
                    int i = sk.Receive(rs);
                    while (i > 0)
                    {
                        lsbs.AddRange(rs.ToList().GetRange(0, i));
                        if (sk.Available > 0)
                        {
                            i = sk.Receive(rs);
                        }
                        else
                        {
                            break;
                        }
                    }
                    Html.Append(System.Text.Encoding.UTF8.GetString(lsbs.ToArray()));
                }
            }

            return Html.ToString();
        }

 

但是现在很难找到个不压缩的网站,所以读出来的都还是乱码,得再加一层解压缩!!!

我这里是想要告诉你,http协议是怎么工作的,没错,它就是在tcp协议的之上在加一套字符串规则。

啊 万能的字符串!!!

现在浏览器的工作机制不那么神秘了吧?

做浏览器也没那么恐怖了吧

哈哈

就到这里,休息,休息,休息一下!

posted on 2010-03-04 19:40  oyster.oy  阅读(277)  评论(1)    收藏  举报

导航