|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。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安全 |
|