简单的说,今天的全部工作就是

我的目的只有两个 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()呢?用于将获得的数据保存在字符串变量之中. 表示从键盘读取字符串后进行换行。

HTTP协议之 简易浏览器(3)--转载的更多相关文章

  1. 第4课 简易浏览器-WebViewer组件的使用方法

    做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...

  2. 计算机网络课设之基于UDP协议的简易聊天机器人

    前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...

  3. python3用pyqt5开发简易浏览器

    http://python.jobbole.com/82715/ 在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器.关于 PyQt ,你可能已经有所耳闻了,它是 ...

  4. (五十九)iOS网络基础之UIWebView简易浏览器实现

    [UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...

  5. IIC通讯协议(非原创,转载他人,用于学习)

    I2C协议:1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效性 6.数据传输 IIC详解 1.I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2.IIC总 ...

  6. 写一个简易浏览器、ASP.NET核心知识(3)

    前言 先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我. 这篇文章的标题有点大,其实挺low的,我需要在开头解释一下.我这里只想写一个小的控制台,旨在模拟浏览器的htt ...

  7. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序

    本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...

  8. 简易浏览器App webview

    使用 public class MainActivity extends Activity {     @Override     protected void onCreate(Bundle sav ...

  9. c# 基于FTP协议的简易软件自动升级程序

    最近在重写了一个老的产品条码扫描程序,客户端数越有30个,因为经常有更新,C/S维护非常不方便,所以做一个自动更新程序特别有必要. 在网上随便找了找自动更新的方案,大多使用VS的发布/更新功能,不太喜 ...

随机推荐

  1. 2.IKAnalyzer 中文分词器配置和使用

    一.配置 IKAnalyzer 中文分词器配置,简单,超简单. IKAnalyzer 中文分词器下载,注意版本问题,貌似出现向下不兼容的问题,solr的客户端界面Logging会提示错误. 给出我配置 ...

  2. 拉姆达表达式(Lambda Expressions)

    上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法

  3. SQLSERVER内核架构剖析 (转)

    我们做管理软件的,主要核心就在数据存储管理上.所以数据库设计是我们的重中之重.为了让我们的管理软件能够稳定.可扩展.性能优秀.可跟踪排错. 可升级部署.可插件运行,我们往往研发自己的管理软件开发平台. ...

  4. sql 2000 分页

    create PROCEDURE [dbo].[Proc_GetPageList] (   @Tables varchar(1000),          --表名   @PK varchar(100 ...

  5. 17 java 存在的问题(转)

    java的问题: 1.性能:java的内存管理似乎比较自动化,但其实性能不是特别好.尤其是new对象的时候没有节制.在java中,有些对象构造成本很低,有些 很高.特别在UI编程的时候,大多数的UI对 ...

  6. 7 RandomAccessFile读取文件内容保存--简单例子(需要验证)

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; /** * 读取动态产生的文件内容 */ publ ...

  7. django 学习杂记

    django1.9 学习路径 http://python.usyiyi.cn/django/intro/tutorial02.html django 中url路径带参数,在view中应该如何处理 应该 ...

  8. Yum中实现与apt-get install build-essential功能类似的命令

    在Ubuntu中安装完系统后,可以直接使用apt-get install build-essential命令安装常用的开发编译工具包.在诸如CentOS这样的使用Yum包管理的系统中,其实也有类似的实 ...

  9. Common Subsequence--poj1458(最长公共子序列)

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43211   Accepted: 17 ...

  10. 远程调试 Azure 上的 Website

    让我们先检查一下使用的 Azure SDK 版本和 Visual Studio 版本.根据MSDN的介绍,Azure 的远程调试功能是在 Azure SDK 2.2 中加入的,所以请确保您的机器上安装 ...