仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 400|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网站制作之C#完成WEB服务器

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:43:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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安全
若相依 该用户已被删除
沙发
发表于 2015-1-19 21:49:47 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
山那边是海 该用户已被删除
板凳
发表于 2015-1-27 08:55:10 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
小魔女 该用户已被删除
地板
发表于 2015-2-5 05:36:03 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
若天明 该用户已被删除
5#
发表于 2015-2-11 06:26:27 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-3-1 23:06:34 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
爱飞 该用户已被删除
7#
发表于 2015-3-11 00:29:53 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
谁可相欹 该用户已被删除
8#
发表于 2015-3-17 17:08:31 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-24 13:42:50 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表