您的位置:首页 > 理论基础 > 计算机网络

HTTP协议之 简易浏览器(3)--转载

2015-12-13 09:06 477 查看
简单的说,今天的全部工作就是





我的目的只有两个 1.加深对http协议的理解 2.深化对B/S结构的认识。

代码

1 /*
2 这个程序把主机地址写死了,
3 想更像的话,可以在加个输入。然后根据输入的url获取 响应报文。
4 */
5
6 Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
7 //连接服务器。http协议默认的端口号是80。每个服务器软件监听一个端口(别的软件就不能监听这个端口了),发送给这个端口的数据只会被这个服务器软件接收到。
8 socket.Connect(new DnsEndPoint("127.0.0.1", 8080));
9 //读写socket通讯数据的流
10 using (NetworkStream netStream = new NetworkStream(socket))
11 using (StreamWriter writer = new StreamWriter(netStream))
12 {
13     //这里就是写之前 讲的请求报文,偷点懒,不多写了
14     writer.WriteLine("GET /index.html HTTP/1.1");
15     writer.WriteLine("Host: 127.0.0.1:8080");
16     //空行回车,表示指令结束
17     //还记得http请求报文格式吗?报文头和报文体之间用一个空行回车隔开。
18     writer.WriteLine();
19 }
20 //开始读喽
21 using (NetworkStream netStream = new NetworkStream(socket))
22 using (StreamReader reader = new StreamReader(netStream))
23 {
24     string line;
25     while ((line = reader.ReadLine())!=null)
26     {
27         //读一行输出一行
28         Console.WriteLine(line);
29     }
30 }
31 //几个释放资源
32 socket.Disconnect(false);


调试

1.预期效果





没错,这就是浏览器请求IIS欢迎页面的响应报文。如果我们的控制台能输出一样的响应报文,证明实验成功了

2.调试结果







响应的报文正确的显示出来了呢。成功了喏!

补充:

Write()和WriteLine()都是用来将输出流由指定的输出装置(默认为屏幕)显示出来.两着差异在

Console.WriteLine()方法是将要输出的字符串与换行控制字符一起输出,当次语句执行完毕时,光标会移到目前输出字符串的下一行.

Console.Write()方法,光标会停在输出字符串的最后一个字符后,不会移动到下一行。

比如说Console.WriteLine("a");Console.WriteLine("b")就会输出在2行的a b而 Console.Write("a");Console.Write("b")就在同一行输出a b.

Console.Read() Console.ReadLine()方法都是从键盘读入信息

Console.Read() 方法用于获得用户输入的任何值的ASCII值.表示从键盘读取字符串,不换行

Console.ReadLine()呢?用于将获得的数据保存在字符串变量之中. 表示从键盘读取字符串后进行换行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: