仓酷云

标题: ASP网站制作之C#完成WEB服务器 [打印本页]

作者: 逍遥一派    时间: 2015-1-16 22:43
标题: ASP网站制作之C#完成WEB服务器
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。web|web服务|web服务器这只是一个复杂的用C#写的WEB服务器,只完成了get体例的对html文件的哀求,有乐趣的伴侣能够在此基本之上持续开辟更多功效,小弟学c#不久,若有讹夺,看请见凉!!

择要:

WWW的事情基于客户机/服务器盘算模子,由Web扫瞄器(客户机)和Web服务器(服务器)组成,二者之间接纳超文本传送协定(HTTP)举行通讯,HTTP协定的感化道理包含四个步骤:毗连,哀求,应对。依据上述HTTP协定的感化道理,本文完成了GET哀求的Web服务器程序的办法,经由过程创立TcpListener类工具,监听端口8080;守候、承受客户机毗连到端口8080;创立与socket字相干联的输出流和输入流;然后,读取客户机的哀求信息,若哀求范例是GET,则从哀求信息中猎取所会见的HTML文件名,假如HTML文件存在,则翻开HTML文件,把HTTP头信息和HTML文件内容经由过程socket传回给Web扫瞄器,然后封闭文件。不然发送毛病信息给Web扫瞄器。最初,封闭与响应Web扫瞄器毗连的socket字。

1、HTTP协定的感化道理

WWW是以Internet作为传输前言的一个使用体系,WWW网上最基础的传输单元是Web网页。WWW的事情基于客户机/服务器盘算模子,由Web扫瞄器(客户机)和Web服务器(服务器)组成,二者之间接纳超文本传送协定(HTTP)举行通讯。HTTP协定是基于TCP/IP协定之上的协定,是Web扫瞄器和Web服务器之间的使用层协定,是通用的、无形态的、面向工具的协定。HTTP协定的感化道理包含四个步骤:

毗连:Web扫瞄器与Web服务器创建毗连,翻开一个称为socket(套接字)的假造文件,此文件的创建标记着毗连创建乐成。

哀求:Web扫瞄器经由过程socket向Web服务器提交哀求。HTTP的哀求通常为GET或POST命令(POST用于FORM参数的传送)。GET命令的格局为:

GET路径/文件名HTTP/1.0

文件名指出所会见的文件,HTTP/1.0指出Web扫瞄器利用的HTTP版本。

应对:Web扫瞄器提交哀求后,经由过程HTTP协定传送给Web服务器。Web服务器接到后,举行事件处置,处置了局又经由过程HTTP传回给Web扫瞄器,从而在Web扫瞄器上显现出所哀求的页面。

例:假定客户机与www.mycomputer.com:8080/mydir/index.html创建了毗连,就会发送GET命令:GET/mydir/index.htmlHTTP/1.0。主机名为www.mycomputer.com的Web服务器从它的文档空间中搜刮子目次mydir的文件index.html。假如找到该文件,Web服务器把该文件内容传送给响应的Web扫瞄器。

为了告诉Web扫瞄器传送内容的范例,Web服务器起首传送一些HTTP头信息,然后传送详细内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分隔。

经常使用的HTTP头信息有:

①HTTP1.0200OK

这是Web服务器应对的第一行,列出服务器正在运转的HTTP版本号和应对代码。代码“200OK”暗示哀求完成。

②MIME_Version:1.0

它唆使MIME范例的版本。

③content_type:范例

这个头信息十分主要,它唆使HTTP体信息的MIME范例。如:content_type:text/html唆使传送的数据是HTML文档。

④content_length:长度值

它唆使HTTP体信息的长度(字节)。

封闭毗连:当应对停止后,Web扫瞄器与Web服务器必需断开,以包管别的Web扫瞄器可以与Web服务器创建毗连。

2、C#完成Web服务器功效的程序计划

依据上述HTTP协定的感化道理,完成GET哀求的Web服务器程序的办法以下:

创立TcpListener类工具,监听某端口(恣意输出闲置端口如:8080)。

守候、承受客户机毗连到该端口,失掉与客户机毗连的socket;

从与socket联系关系的输出流中读取一行客户机提交的哀求信息,哀求信息的格局为:GET路径/文件名HTTP/1.0

从哀求信息中猎取哀求范例。假如哀求范例是GET,则从哀求信息中猎取所会见的HTML文件名。没有HTML文件名时,则以index.html作为文件名;

假如HTML文件存在,则翻开HTML文件,把HTTP头信息和HTML文件内容经由过程socket传回给Web扫瞄器,然后封闭文件。不然发送毛病信息给Web扫瞄器;

封闭与响应Web扫瞄器毗连的socket字。


完成的代码以下:
//////////webserver.cs//////////////////


namespacecnnbsun.webserver
{
usingSystem;
usingSystem.IO;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.Threading;


classMyWebServer
{

privateTcpListenermyListener;
privateintport=8080;//选者任何闲置端口

//入手下手兼听端口
//同时启动一个兼听历程
publicMyWebServer()
{
try
{
//入手下手兼听端口
myListener=newTcpListener(port);
myListener.Start();
Console.WriteLine("WebServerRunning...Press^CtoStop...");
//同时启动一个兼听历程StartListen
Threadth=newThread(newThreadStart(StartListen));
th.Start();

}
catch(Exceptione)
{
Console.WriteLine("兼听端口时产生毛病:"+e.ToString());
}
}
publicvoidSendHeader(stringsHttpVersion,stringsMIMEHeader,intiTotBytes,stringsStatusCode,refSocketmySocket)
{

StringsBuffer="";

if(sMIMEHeader.Length==0)
{
sMIMEHeader="text/html";//默许text/html
}

sBuffer=sBuffer+sHttpVersion+sStatusCode+"
";
sBuffer=sBuffer+"Server:cx1193719-b
";
sBuffer=sBuffer+"Content-Type:"+sMIMEHeader+"
";
sBuffer=sBuffer+"Accept-Ranges:bytes
";
sBuffer=sBuffer+"Content-Length:"+iTotBytes+"

";

Byte[]bSendData=Encoding.ASCII.GetBytes(sBuffer);

SendToBrowser(bSendData,refmySocket);

Console.WriteLine("TotalBytes:"+iTotBytes.ToString());

}

publicvoidSendToBrowser(StringsData,refSocketmySocket)
{
SendToBrowser(Encoding.ASCII.GetBytes(sData),refmySocket);
}

publicvoidSendToBrowser(Byte[]bSendData,refSocketmySocket)
{
intnumBytes=0;

try
{
if(mySocket.Connected)
{
if((numBytes=mySocket.Send(bSendData,bSendData.Length,0))==-1)
Console.WriteLine("SocketErrorcannotSendPacket");
else
{
Console.WriteLine("No.ofbytessend{0}",numBytes);
}
}
else
Console.WriteLine("毗连失利....");
}
catch(Exceptione)
{
Console.WriteLine("产生毛病:{0}&qu</p>缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全
作者: 若相依    时间: 2015-1-19 21:49
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 山那边是海    时间: 2015-1-27 08:55
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
作者: 小魔女    时间: 2015-2-5 05:36
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
作者: 若天明    时间: 2015-2-11 06:26
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
作者: 愤怒的大鸟    时间: 2015-3-1 23:06
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
作者: 爱飞    时间: 2015-3-11 00:29
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 谁可相欹    时间: 2015-3-17 17:08
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
作者: 第二个灵魂    时间: 2015-3-24 13:42
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2