创建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(); } } } } }