HTTP协议之 简易浏览器(3)--转载
简单的说,今天的全部工作就是
我的目的只有两个 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)--转载的更多相关文章
- 第4课 简易浏览器-WebViewer组件的使用方法
做一个手机浏览器,需要哪些组件呢? 一.组件设计 二.组件属性及命名修改 三.逻辑设计 1.导航按钮代码:前进.后退.主页 2.访问网页按钮 1)根据用户在地址栏输入的地址书写,判断书写中是否含有“h ...
- 计算机网络课设之基于UDP协议的简易聊天机器人
前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...
- python3用pyqt5开发简易浏览器
http://python.jobbole.com/82715/ 在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器.关于 PyQt ,你可能已经有所耳闻了,它是 ...
- (五十九)iOS网络基础之UIWebView简易浏览器实现
[UIWebView网络浏览器] 通过webView的loadRequest方法可以发送请求显示相应的网站,例如: NSURL *url = [NSURL URLWithString:@"h ...
- IIC通讯协议(非原创,转载他人,用于学习)
I2C协议:1.空闲状态 2.开始信号 3.停止信号 4.应答信号 5.数据的有效性 6.数据传输 IIC详解 1.I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2.IIC总 ...
- 写一个简易浏览器、ASP.NET核心知识(3)
前言 先在文章前面说好了,省得大家发现我根本没有这样的头发,duang的一下一堆人骂我. 这篇文章的标题有点大,其实挺low的,我需要在开头解释一下.我这里只想写一个小的控制台,旨在模拟浏览器的htt ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
- 简易浏览器App webview
使用 public class MainActivity extends Activity { @Override protected void onCreate(Bundle sav ...
- c# 基于FTP协议的简易软件自动升级程序
最近在重写了一个老的产品条码扫描程序,客户端数越有30个,因为经常有更新,C/S维护非常不方便,所以做一个自动更新程序特别有必要. 在网上随便找了找自动更新的方案,大多使用VS的发布/更新功能,不太喜 ...
随机推荐
- sql 读取excel中的数据
select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...
- EF中的连接字符串
映射视图是每个实体集和关联的映射中指定的可转换的可执行表示. 包括两部分: 查询视图 表示从数据库架构转到概念架构所需的规范装换 更新视图 表示从概念模型转到数据库架构所需的规范转换 如果应用程序仅用 ...
- oracle时间戳转换
select (to_date('2013-04-09 14:02:15','yyyy-mm-dd hh24:mi:ss') - to_date('1970-01-01','yyyy-mm-dd')) ...
- 查看kafka的group.id
kafka/config目录下的consumer.properties中可以看到
- cocos2dx 碰撞检测
//必须 要有float类型的参数 void MainScene::updateFrame(float dt) { if (spriteTest != NULL && spriteTe ...
- asp.net mvc4 远程验证
[HttpGet] public ActionResult CheckToolsIdExists(string ToolsID) { using (BaseContext context = new ...
- 学习CAS实现SSO单点登录
学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...
- chart.js 示例
一个简单的例子. 1.html代码 <div id="pie" style="width: 250px;float:left"> <h3> ...
- js页面加载进度条(这个就比较正式了,改改时间就完事儿)
不废话,直接上代码 思路不难,就是一个animate方法配合随机数 duration内个三秒钟,是自定义的,可以改成页面加载时间,这样就完美了 <!doctype html> <ht ...
- 关于HTML的使用。
一丶标签问题 对于初学者来说,无疑用得最多的标签就是div和span了,当然就算只用这2个标签也能写出一个好看的页面,但是W3C为什么会给我们这么多标签来选择呢? 从浏览器的渲染来讲,标签的语义话,更 ...