日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c#web服务器 虚拟目录,C#建立自己的Web服务器

發布時間:2023/12/4 C# 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#web服务器 虚拟目录,C#建立自己的Web服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#建立自己的Web服務器

個人珍藏,僅為存檔.今天整理磁盤,沒處放.扔BLOG.

看不懂,別問我.自己研究.

webserver.cs

namespace cnnbsun.webserver

{

using System;

using System.IO;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading ;

class MyWebServer

{

private TcpListener myListener ;

private int port = 8080 ; // 選者任何閑置端口

//開始兼聽端口

//同時啟動一個兼聽進程

public MyWebServer()

{

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()

{

MyWebServer MWS = new MyWebServer();

}

public void StartListen()

{

int iStartPos = 0;

String sRequest;

String sDirName;

String sRequestedFile;

String sErrorMessage;

String sLocalDir;

/注意設定你自己的虛擬目錄/

String sMyWebServerRoot = "E:\\MyWebServerRoot\\"; //設置你的虛擬目錄

//

String sPhysicalFilePath = "";

String sFormattedMessage = "";

String sResponse = "";

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 = "

Error!! Requested Directory does not exists


";

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 = "

404 Error! File Does Not Exists...

";

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();

}

}

}

}

}

相關閱讀:

MSSQL Server導入導出數據庫方法小結

vbs選擇文件夾效果代碼

PHP正則漢字匹配,JS正則漢字匹配

JS加密編碼算法代碼

CSS3教程之CSS定位屬性

Windows 7如何找回快速啟動欄

正則表達式學習筆記

CSS基礎教程之CSS邊距屬性

div層的移動及性能優化

C#上傳文件大于4M的解決方法

新浪背投廣告js代碼

Oracle時間函數操作大全

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的c#web服务器 虚拟目录,C#建立自己的Web服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。