国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

用C#建立自己的Web服務(wù)器

2024-07-21 02:19:13
字體:
供稿:網(wǎng)友
,歡迎訪問網(wǎng)頁(yè)設(shè)計(jì)愛好者web開發(fā)。個(gè)人珍藏,僅為存檔.今天整理磁盤,沒處放.扔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 ; // 選者任何閑置端口

//開始兼聽端口
//同時(shí)啟動(dòng)一個(gè)兼聽進(jìn)程
public mywebserver()
{
try
{
//開始兼聽端口
mylistener = new tcplistener(port) ;
mylistener.start();
console.writeline("web server running... press ^c to stop...");
//同時(shí)啟動(dòng)一個(gè)兼聽進(jìn)程 'startlisten'
thread th = new thread(new threadstart(startlisten));
th.start() ;

}
catch(exception e)
{
console.writeline("兼聽端口時(shí)發(fā)生錯(cuò)誤 :" +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"; // 默認(rèn) 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("發(fā)生錯(cuò)誤 : {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;
/////////////////////////////////////注意設(shè)定你自己的虛擬目錄/////////////////////////////////////
string smywebserverroot = "e://mywebserverroot//"; //設(shè)置你的虛擬目錄
//////////////////////////////////////////////////////////////////////////////////////////////////
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) ;


//轉(zhuǎn)換成字符串類型
string sbuffer = encoding.ascii.getstring(breceive);


//只處理"get"請(qǐng)求類型
if (sbuffer.substring(0,3) != "get" )
{
console.writeline("只處理get請(qǐng)求類型..");
mysocket.close();
return;
}

// 查找 "http" 的位置
istartpos = sbuffer.indexof("http",1);


string shttpversion = sbuffer.substring(istartpos,8);


// 得到請(qǐng)求類型和文件目錄文件名
srequest = sbuffer.substring(0,istartpos - 1);

srequest.replace("//","/");


//如果結(jié)尾不是文件名也不是以"/"結(jié)尾則加"/"
if ((srequest.indexof(".") <1) && (!srequest.endswith("/")))
{
srequest = srequest + "/";
}


//得帶請(qǐng)求文件名
istartpos = srequest.lastindexof("/") + 1;
srequestedfile = srequest.substring(istartpos);


//得到請(qǐng)求文件目錄
sdirname = srequest.substring(srequest.indexof("/"), srequest.lastindexof("/")-3);


//獲取虛擬目錄物理路徑
slocaldir = smywebserverroot;

console.writeline("請(qǐng)求文件目錄 : " + 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 )
{
// 取得請(qǐng)求文件名
srequestedfile = "index.html";
}


/////////////////////////////////////////////////////////////////////
// 取得請(qǐng)求文件類型(設(shè)定為text/html)
/////////////////////////////////////////////////////////////////////

string smimetype = "text/html";

sphysicalfilepath = slocaldir + srequestedfile;
console.writeline("請(qǐng)求文件: " + 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();
}
}
}


}

}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖江市| 乐至县| 将乐县| 铁力市| 石狮市| 建水县| 万荣县| 韶山市| 通州区| 津南区| 东至县| 和龙市| 牡丹江市| 申扎县| 砚山县| 迁西县| 卓资县| 刚察县| 桂阳县| 乌兰县| 海林市| 绩溪县| 平和县| 临清市| 桂平市| 郧西县| 大庆市| 岫岩| 固安县| 麻城市| 东阿县| 廉江市| 隆德县| 和龙市| 枞阳县| 桐庐县| 云和县| 乾安县| 长沙市| 江西省| 巴林右旗|