如何在IIS服务器上搭建自己的网站呢,今天带着这问题进行简单的实践一下,并且准备模拟一下IIS服务器工作方式,把这个工作方式搞清楚有利于发展。

1、首先应该进入控制面板=》程序=》添加或删除程序=》找到IIS 全部打钩。

  

2、

2、首先要自己建立一个网页。进行模拟。

3、然后在打开的IIS服务器,点击右键进行建立网页。

4、然后添加各种配置,如图:

5、填写必须的参数如图:

6、点击OK,点击浏览,如果端口是80端口。不会弹出你所希望看到的窗口。

7、所以我们要进行简单的调试。

8、点击绑定按钮:

9:再次在浏览器上查看;

到这里一个IIS上布置就基本上完成了。由于时间关系模拟IIS服务器下次给出详细的代码,有助你更好的学习网站编程。

先上一个总体的分析图:

IISDemo

这里给给关注我的好友道个歉,说是补齐下半部分,已经时隔半年,今天终于补齐了这文章,补齐这个文章也引起了我的深思,到你因该怎样学习,才能成为出色的web开发者。

IIS模拟思路:

      1. 使用Socket套接字编程。

2. 深刻理解web Form 中的 IhttpHandler 、HttpApplication、HttpContext、HttpRequest、HttpResponse 几个封装的类。

3. 对http协议的有个深刻的认识,或者理解其协议格式。

4. 最后就是不错的编程基础。把想法写成代码。

socket编程

socket编程主要有一下几步

       //获取ip和端口
string host = txthost.Text.Trim();
int port =int.Parse(txtPort.Text.Trim());
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(host), port);
//建立socket链接
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(ipe);
s.Listen(10);
txtbody.Text = "开始监听";
//开始接收,接收时会阻塞,所以采用多进程的方式
System.Threading.Thread td = new Thread(()=>
{
while(true)
{
Socket temp = s.Accept();//为新建立的socket txtbody.Text += "\r\n建立链接";
string recvStr =string.Empty;//创建接受字符串
byte[] recvBytes = new byte[2*1024*1024];
int len= temp.Receive(recvBytes, recvBytes.Length, 0); //获取前台取得的字符串
string str = System.Text.Encoding.Default.GetString(recvBytes, 0, len); //解析报文 HttpContext context = new HttpContext(str); //处理请求 HttpApplication application = new HttpApplication();
application.processContext(context); //返回响应 temp.Send(context.response.responseHeader()); temp.Send(context.response.responsebody); //关闭socket
temp.Shutdown(SocketShutdown.Both);
temp.Close(); } });
td.Start();

  

HttpContext

字面理解是http上下文。暂且不用去管ms封住的,这里为了演示方面里面封装了httpRequest,httpResponse属性。

 public  class HttpContext
{
public HttpRequest request { get; set; }
public HttpResponse response { get; set; }
public HttpContext(string requestStr)
{
request = new HttpRequest(requestStr);
response = new HttpResponse(request);
}
}

HttpRequest

httpRequest 用于解析Client端的请求,从而告诉context上下文,服务器应该返回怎样的数据给Client端。

  public class HttpRequest
{
public string getMothed { get; set; }
public string url { get; set; }
public string version { get; set; }
public HttpRequest( string requestStr)
{
//GET http://c.gj.qq.com HTTP/1.1
//Host: c.gj.qq.com
//Connection: keep-alive
//Accept: image/webp,image/*,*/*;q=0.8
//User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
//Accept-Encoding: gzip, deflate, sdch
//Accept-Language: zh-CN,zh;q=0.8
//Cookie: pgv_pvid=9224263521; o_cookie=871119239; ptui_loginuin=871119239@qq.com; ptcz=4308290a6e8e29b0645417e52d73567b0bc7ba24b13508b2c685c2a7ccaaec3f; pt2gguin=o0871119239; uin=o0871119239; skey=@Tk5Xvq7l1; qm_username=871119239; qm_sid=0921d209c7585c27d505c5d093cc1d22,qblA2Z21rc3F1eFZBZjFvczRwVypoZXhXelpsU3dQdS0wa2tJQ0l5eWNkSV8.
//解析前台发送回来的数据
var allLines = requestStr.Replace("\r\n", "\r");
//获取第一行
var firstline = allLines.Split('\r')[];
//获取请求的方法
getMothed = firstline.Split(' ')[];
url = firstline.Split(' ')[];
version = firstline.Split(' ')[];
}
}

HttpResponse

httpResponse是返回响应的请求。着返回响应的求请求,必须要处理就需要httpApplicationl.

  public byte[] responsebody { get; set; }
public HttpRequest request { get; set; }
public HttpResponse(HttpRequest Request)
{
request = Request;
}
public byte[] responseHeader()
{
//HTTP/1.1 200 OK
//Date: Sun, 08 May 2016 05:55:33 GMT
//Server: Apache
//Cache-Control: max-age=0
//Expires: Sun, 08 May 2016 05:55:33 GMT
//Vary: Accept-Encoding
//Content-Length: 40
//Connection: close
//Content-Type: text/html
StringBuilder sb = new StringBuilder();
sb.AppendFormat("HTTP/1.1 200 OK\r\n");
sb.AppendFormat("Content-Length:{0}\r\n",responsebody.Length);
//获取请求类型
var ext=System.IO.Path.GetExtension(request.url);
sb.AppendFormat("Content-Type:{0}\r\n\r\n", GetContenType(ext));
return System.Text.Encoding.Default.GetBytes(sb.ToString()); }
public string GetContenType(string ext)
{
string type = "text/html";
switch (ext)
{
case ".aspx":
case ".html":
case ".htm":
type = "text/html";
break;
case ".png":
type = "image/png";
break;
case ".gif":
type = "image/gif";
break;
case ".jpg":
case ".jpeg":
type = "image/jpeg";
break;
case ".css":
type = "text/css";
break;
case ".js":
type = "application/x-javascript";
break;
default:
type = "text/plain";
break;
}
return type;
}
}

HttpApplication

该类继承接口IhttpHandler

   public interface IhttpHandler
{
void processContext(HttpContext context);
}
public class HttpApplication:IhttpHandler
{
public void processContext(HttpContext context)
{
//拼接路径
string basePath = AppDomain.CurrentDomain.BaseDirectory;
//虚拟路径转绝对路径
string urlPath = context.request.url.TrimStart('/');
string path = System.IO.Path.Combine(basePath, urlPath);
if (System.IO.File.Exists(path))
{
byte[] b = System.IO.File.ReadAllBytes(path);
context.response.responsebody = b;
}
else
{
byte[] b = System.IO.File.ReadAllBytes(basePath +@"/404.html");
context.response.responsebody = b;
} }
}

运行程序即可得到上述发布的网页。

使用IIS建立自己的网站、使用C#编写IIS模拟器,更好的理解Client和Server的relation的更多相关文章

  1. windows下利用iis建立网站网站并实现局域共享

    博客园 首页 新随笔 联系 管理 订阅 随笔- 54  文章- 9  评论- 0  Windows下利用IIS建立网站并实现局域网共享 https://blog.csdn.net/qq_4148541 ...

  2. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  3. C#控制IIS动态添加删除网站

    我的目的是在Winform程序里面,可以直接启动一个HTTP服务端,给下游客户连接使用. 查找相关技术,有两种方法: 1.使用C#动态添加网站应用到IIS中,借用IIS的管理能力来提供HTTP接口.本 ...

  4. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法IIS上部署MVC网站,打开后500错误

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...

  5. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...

  6. linux下的php网站放到Windows服务器IIS下导入 .htaccess文件伪静态规则转换 (wordpress)

    需要特别注意的是: 1. .htacdess文件在 wordpress中 是可以生成的 安装 WP Super Cache后,开启该插件>>设置>>高级>>找到并点 ...

  7. IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决办法

    IIS上部署MVC网站,打开后ExtensionlessUrlHandler-Integrated-4.0解决方法 IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrl ...

  8. apache 修改端口号 修改根目录 建立多个网站

    修改apache端口号选择Apache下的httpd.conf,查找:Listen,你会看到 #Listen 12.34.56.78:80Listen 80把80改成90,保存就好了 修改WampSe ...

  9. linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换

    此办法只适合于linux下的php网站放到Windows服务器IIS下 ,  网站除了主页面正常以外  子页面全部出现404错误    这里子页面出现404 错误是说明伪静态没有开启 什么是.htac ...

随机推荐

  1. OSCHina技术导向:Java模板引擎velocity

    OSChina 采用 velocity 作为页面模板 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template langua ...

  2. 什么是dandy 风格_百度知道

    什么是dandy 风格_百度知道     什么是dandy 风格    2010-06-21 10:56 平ping123 | 分类:服装/首饰 | 浏览11257次     题谢谢     有没有比 ...

  3. MediaInfo使用简介(新版本支持HEVC)

    MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.我使用中发现,新版本的Media ...

  4. hdu 5607 graph (矩阵乘法快速幂)

    考虑一个经典的问题: 询问从某个点出发,走 k 步到达其它各点的方案数? 这个问题可以转化为矩阵相乘,所以矩阵快速幂即可解决. 本题思路: 矩阵经典问题:求从i点走k步后到达j点的方案数(mod p) ...

  5. Python OpenGL学习(1): 环境配置及错误篇

    系统环境是:Ubuntu 14.04 个人首次接触OpenGL,学到哪就写到哪. 1.模块安装: sudo apt-get install python-openglpip install PyOpe ...

  6. DEDE列表页调用TAG标签

    [field:id function=GetTags(@me)/] 标签就可以调用出来了 只不过不带连接的,如果需要连接,请注释include\helpers\archive.helper.php文件 ...

  7. Oracle delete input与delete all input

    oracle官方文档提示:If you had specified DELETE INPUT rather than DELETE ALL INPUT, then RMAN would have on ...

  8. css系列教程--border和background

    css标签b:1.background:用法 background:可以指定颜色,背景,平铺效果以及背景定位.background:url(aa.png) #fff 0px 0px no-repeat ...

  9. windows不能在本地计算机启动SQL Server(MSSQLSERVER)

    windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...

  10. ArrayList、Vactor以及LinkList的区别

    ArrayList:底层数据结构是数组结构,你就可以把它看成是一个可变大小的且只能装对象的数组.因为数组有索引(角标)所以ArrayList的查询速度快,而添加删除元素速度稍慢.因为,你每删除或者添加 ...