创建Console应用程序,粘贴一下代码,创建E://MyWebServerRoot//目录,作为虚拟目录,亲自测试通过,

有一个想法,调用ASP.DLL解析ASP,可是始终没有找到资料,有待于研究,还有.NET。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebServer
{
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading;

class Server
    {

private TcpListener myListener;
        private int port = 8080; // 选者任何闲置端口

//开始兼听端口
        //同时启动一个兼听进程
        public Server()
        {
            try
            {
                //开始兼听端口
                myListener = new TcpListener(port);
                myListener.Start();
                Console.WriteLine("Web Server Running... Press ^C to Stop...");
                //同时启动一个兼听进程 'StartListen'
                Thread th = new Thread(new ThreadStart(StartListen));
                th.Start();

}
            catch (Exception e)
            {
                Console.WriteLine("兼听端口时发生错误 :" + e.ToString());
            }
        }
        public void SendHeader(string sHttpVersion, string sMIMEHeader, int iTotBytes, string sStatusCode, ref Socket mySocket)
        {

String sBuffer = "";

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

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

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

SendToBrowser(bSendData, ref mySocket);

Console.WriteLine("Total Bytes : " + iTotBytes.ToString());

}

public void SendToBrowser(String sData, ref Socket mySocket)
        {
            SendToBrowser(Encoding.ASCII.GetBytes(sData), ref mySocket);
        }

public void SendToBrowser(Byte[] bSendData, ref Socket mySocket)
        {
            int numBytes = 0;

try
            {
                if (mySocket.Connected)
                {
                    if ((numBytes = mySocket.Send(bSendData, bSendData.Length, 0)) == -1)
                        Console.WriteLine("Socket Error cannot Send Packet");
                    else
                    {
                        Console.WriteLine("No. of bytes send {0}", numBytes);
                    }
                }
                else
                    Console.WriteLine("连接失败....");
            }
            catch (Exception e)
            {
                Console.WriteLine("发生错误 : {0} ", e);

}
        }
        public static void Main()
        {
            Server MWS = new Server();
        }
        public void StartListen()
        {

int iStartPos = 0;
            String sRequest;
            String sDirName;
            String sRequestedFile;
            String sErrorMessage;
            String sLocalDir;
            /注意设定你自己的虚拟目录/
            String sMyWebServerRoot = "E://MyWebServerRoot//"; //设置你的虚拟目录
            //
            String sFormattedMessage = "";
            String sResponse = "";
            string sPhysicalFilePath = "";

while (true)
            {
                //接受新连接
                Socket mySocket = myListener.AcceptSocket();

Console.WriteLine("Socket Type " + mySocket.SocketType);
                if (mySocket.Connected)
                {
                    Console.WriteLine("/nClient Connected!!/n==================/nCLient IP {0}/n", mySocket.RemoteEndPoint);

Byte[] bReceive = new Byte[1024];
                    int i = mySocket.Receive(bReceive, bReceive.Length, 0);

//转换成字符串类型
                    string sBuffer = Encoding.ASCII.GetString(bReceive);

//只处理"get"请求类型
                    if (sBuffer.Substring(0, 3) != "GET")
                    {
                        Console.WriteLine("只处理get请求类型..");
                        mySocket.Close();
                        return;
                    }

// 查找 "HTTP" 的位置
                    iStartPos = sBuffer.IndexOf("HTTP", 1);

string sHttpVersion = sBuffer.Substring(iStartPos, 8);

// 得到请求类型和文件目录文件名
                    sRequest = sBuffer.Substring(0, iStartPos - 1);

sRequest.Replace("//", "/");

//如果结尾不是文件名也不是以"/"结尾则加"/"
                    if ((sRequest.IndexOf(".") < 1) && (!sRequest.EndsWith("/")))
                    {
                        sRequest = sRequest + "/";
                    }

//得带请求文件名
                    iStartPos = sRequest.LastIndexOf("/") + 1;
                    sRequestedFile = sRequest.Substring(iStartPos);

//得到请求文件目录
                    sDirName = sRequest.Substring(sRequest.IndexOf("/"), sRequest.LastIndexOf("/") - 3);

//获取虚拟目录物理路径
                    sLocalDir = sMyWebServerRoot;

Console.WriteLine("请求文件目录 : " + sLocalDir);

if (sLocalDir.Length == 0)
                    {
                        sErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>";
                        SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);
                        SendToBrowser(sErrorMessage, ref mySocket);
                        mySocket.Close();
                        continue;
                    }

if (sRequestedFile.Length == 0)
                    {
                        // 取得请求文件名
                        sRequestedFile = "index.html";
                    }

/
                    // 取得请求文件类型(设定为text/html)
                    /

String sMimeType = "text/html";

sPhysicalFilePath = sLocalDir + sRequestedFile;
                    Console.WriteLine("请求文件: " + sPhysicalFilePath);

if (File.Exists(sPhysicalFilePath) == false)
                    {

sErrorMessage = "<H2>404 Error! File Does Not Exists...</H2>";
                        SendHeader(sHttpVersion, "", sErrorMessage.Length, " 404 Not Found", ref mySocket);
                        SendToBrowser(sErrorMessage, ref mySocket);

Console.WriteLine(sFormattedMessage);
                    }

else
                    {
                        int iTotBytes = 0;

sResponse = "";

FileStream fs = new FileStream(sPhysicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);

BinaryReader reader = new BinaryReader(fs);
                        byte[] bytes = new byte[fs.Length];
                        int read;
                        while ((read = reader.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            sResponse = sResponse + Encoding.ASCII.GetString(bytes, 0, read);

iTotBytes = iTotBytes + read;

}
                        reader.Close();
                        fs.Close();

SendHeader(sHttpVersion, sMimeType, iTotBytes, " 200 OK", ref mySocket);
                        SendToBrowser(bytes, ref mySocket);
                        //mySocket.Send(bytes, bytes.Length,0);

}
                    mySocket.Close();
                }
            }
        }

}

}

创建Console应用程序,粘贴一下代码,创建E://MyWebServerRoot//目录,作为虚拟目录,亲自测试通过,相关推荐

  1. VS创建 Win32 应用程序(实现窗口的创建)

    VS创建 Win32 应用程序(实现窗口的创建)(二) 程序框架如下: 一.VS演示流程 打开VS----文件----新建----项目----Windows 桌面应用程序 二.生成代码:(大部分函数在 ...

  2. mysql怎么创建窗口应用程序,使用 MySQL 数据库创建简单的 Web 应用程序

    index.jsp 要在 index.jsp 中动态显示窗体的内容,您需要从 Subject 数据库表访问所有 name. 将鼠标悬停在 "Palette"(组件面板)中的 &qu ...

  3. ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application

    今天看了Scott关于ASP.NET Core的介绍视频,发现用命令行一步一步新建项目.添加Package.Restore.Build.Run 执行的实现方式,更让容易让我们了解.NET Core的运 ...

  4. 创建IOS应用程序通用下的Setting以及读取方式

    在iphone和ipad中,有一个东西大家一定很熟悉,那个东西就是Settings. 这次要学习的东西说白了很简单,就是学习如何在Settings中对一个app的某些属性进行设置,反过来,在app中更 ...

  5. vs.Net2003无法打开或创建Web应用程序若干解决办法

    昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不 ...

  6. 2020计算机取消vb,2020年全国计算机二级VB复习知识点:创建VB应用程序的一

    [摘要] 即将参加全国计算机等级考试的考生们,考试即将到来,大家的备考工作进行得如何了?考必过为大家精心整理了2020年全国计算机二级VB复习知识点:创建VB应用程序的一,希望能够助力全国计算机等级考 ...

  7. 你不得不知道的Visual Studio 2012(3)- 创建Windows应用程序

    创建项目 在Visual Studio中创建一个应用程序,应首先创建一个项和一个解决方案.在此示例中,您将创建Windows presentation foundation应用程序. 创建 WPF 项 ...

  8. 在Windows上创建CUDA C程序

    文章目录 一.安装Visual Studio 二.安装CUDA工具包 (一)查看GPU型号 (二)下载CUDA10.0 (三)安装CUDA10.0 三.初探CUDA C程序 (一)CUDA C程序概述 ...

  9. sharepoint 2016 学习系列篇(5)-创建一个应用程序网站

    前面已经完成了整个sharepoint server 2016的安装和配置,接下来,我们当然是要创建一个应用程序网站. 1.创建应用程序网站 打开sharepoint管理中心,点击Applicatio ...

最新文章

  1. 2020卫星参数表大全_王者荣耀比较秀的名字 2020年比较骚气比较浪的王者荣耀名字大全...
  2. 从生态、业绩角度分析芯片行业
  3. Java继承、重写与重载 笔记
  4. 数据库事务原理详解-数据库隔离级别
  5. 伪静态php配置,PHP开启伪静态配置
  6. XML——解析XML文档
  7. linux驱动分离分层的概念
  8. 为什么拙劣的软件也会成功?
  9. 【java学习之路】(java框架)010.声明式事务控制
  10. Git的17条基本用法
  11. 禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
  12. c# LINQ 使用
  13. 考软考信息处理技术员之前,这些问题你要知道!
  14. JavaScript分割字符串
  15. linux查看文件夹的命令是,linux查看文件夹大小命令是什么
  16. w7无法訪问计算机上硬盘分区,Win7/win10双系统无法打开磁盘分区提示拒绝访问怎么解决...
  17. Android 手把手教你实现百度身份证识别
  18. CoreOS为Kubernetes量身打造分布式存储方案Torus
  19. ibm aix_IBM AIX SAN Volume Controller更新和迁移
  20. 利用Photoshop进行快速切图

热门文章

  1. 160 - 18 Brad Soblesky.1
  2. c#给定编码中的字符无效_C#程序检查给定的字符串是否等于(==)运算符
  3. 平院Python习题
  4. ffmpeg 使用ffplay 进行 hls 拉流 分析 1
  5. Linux内核设计与实现---页高速缓存和页回写
  6. matlab lu分解求线性方程组_计算方法(二)直接三角分解法解线性方程组
  7. [leetcode] 617. Merge Two Binary Trees
  8. 再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)
  9. 树链剖分入门+HYSBZ - 1036树的统计Count
  10. C++ template —— 动多态与静多态(六)