欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Web服務(wù)器實驗3報告

      時間:2019-05-14 00:50:37下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《Web服務(wù)器實驗3報告》,但愿對你工作學(xué)習(xí)有幫助,當然你在寫寫幫文庫還可以找到更多《Web服務(wù)器實驗3報告》。

      第一篇:Web服務(wù)器實驗3報告

      操作系統(tǒng)實驗報告三

      姓名:陳玉博

      學(xué)號:2011011207

      日期:2013-11-24

      【實驗內(nèi)容】:設(shè)計一段內(nèi)存結(jié)構(gòu),能夠緩存一定數(shù)量的網(wǎng)頁,在客戶端訪問時,首先從內(nèi)存中查找是否存在客戶端訪問的網(wǎng)頁內(nèi)容,如果存在,則直接從內(nèi)存中將相應(yīng)的內(nèi)容返回給客戶端;如果不存在,則從磁盤中將網(wǎng)頁內(nèi)容讀入到內(nèi)存,并返回給客戶端?!緦嶒炈悸贰浚嚎蛻舳诉B接之后,在線程的處理函數(shù)handle()函數(shù)中,從內(nèi)存中查找相應(yīng)的網(wǎng)頁內(nèi)容,發(fā)送至客戶端。如果在內(nèi)存中找不到,則通過調(diào)用store()函數(shù)從磁盤中讀取該網(wǎng)頁到內(nèi)存,當內(nèi)存中的網(wǎng)頁個數(shù)大于100的時候,通過某種算法從內(nèi)存中移除某個網(wǎng)頁,然后重新存入新的網(wǎng)頁。在主函數(shù)中,連接成功以后調(diào)用handle()函數(shù),然后在handle()函數(shù)中,如果找不到請求的網(wǎng)頁,則調(diào)用store()函數(shù)。【主要代碼及注釋】----main函數(shù):

      void main(int argc, _TCHAR* argv[]){ //聲明處理函數(shù),作為QueueUserWorkItem的一個參數(shù)

      DWORD WINAPI handle(void *);//初始化WinSock庫

      WORD wVersionRequested;WSADATA wsaData;

      wVersionRequested = MAKEWORD(2, 2);

      int wsaret=WSAStartup(wVersionRequested,&wsaData);if(wsaret)

      return;//創(chuàng)建SOCKET

      SOCKET socketSrv;

      socketSrv=socket(AF_INET,SOCK_STREAM,0);if(socketSrv==INVALID_SOCKET)

      return;SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(87);

      //綁定套接字

      if(bind(socketSrv,(struct sockaddr*)&addrSrv,sizeof(SOCKADDR))){ //關(guān)閉連接

      shutdown(socketSrv,1);closesocket(socketSrv);

      WSACleanup();return;} //等待客戶端連接

      SOCKADDR_IN addrCli;int len=sizeof(SOCKADDR);//監(jiān)聽端口

      if(listen(socketSrv,5)==SOCKET_ERROR){ printf(“監(jiān)聽失敗!n”);} while(true){ //接受連接

      SOCKET socketconn= accept(socketSrv,(SOCKADDR*)&addrCli, &len);

      if(socketconn==SOCKET_ERROR)

      {

      cout<<“接受連接失敗!”;

      return;

      }

      cout<<“連接成功”<

      shutdown(socketSrv,1);closesocket(socketSrv);

      WSACleanup();return;}----handle函數(shù):

      DWORD WINAPI handle(void *para){ //聲明store函數(shù),用來從磁盤中讀取網(wǎng)頁內(nèi)容到內(nèi)存

      void store(string);SOCKET socketconn=(SOCKET)para;//連接成功后與客戶端進行會話 char recvBuff[1024];string sendBuff;

      string locDir;ifstream fp;//接收請求

      if(recv(socketconn,recvBuff,1024,0)==SOCKET_ERROR)return 0;//讀取http請求頭

      string recvBuffer=recvBuff;int posGet=recvBuffer.find(“GET”,0);int posHttp=recvBuffer.find(“HTTP”,0);for(int pos=posGet+4;pos

      locDir.push_back('');

      continue;} locDir.push_back(recvBuffer[pos]);} int len=locDir.length();//截取網(wǎng)頁的文件名

      string ine_str=locDir.substr(1,len-2);//從內(nèi)存中獲得該網(wǎng)頁的內(nèi)容

      string allcontent=webhtml[ine_str];//如果在內(nèi)存中找不到,則再從磁盤中把網(wǎng)頁讀入內(nèi)存,然后再從內(nèi)存中查找 if(allcontent==“"){ //調(diào)用store函數(shù),從磁盤中重新讀取網(wǎng)頁內(nèi)容 store(ine_str);//重新從內(nèi)存中讀取網(wǎng)頁內(nèi)容

      allcontent=webhtml[ine_str];} //將讀取的內(nèi)容追加入sendBuff中 sendBuff.append(allcontent);fp.close();//響應(yīng)請求,將頁面信息發(fā)送到客戶端

      if(send(socketconn,sendBuff.c_str(),sendBuff.length(),0)==SOCKET_ERROR){

      cout<<”傳送文件錯誤!“;

      return 0;} shutdown(socketconn,1);closesocket(socketconn);//關(guān)閉連接

      return 0;}----Store()函數(shù):

      void store(string ine_str){

      //如果內(nèi)存中的網(wǎng)頁個數(shù)大于100個,則把第一個移除

      if(webhtml.size()>100){ map::iterator Iter=webhtml.begin();webhtml.erase(Iter);} string allchars=”“;//一個網(wǎng)頁中所有的字符

      char buffer[1024*10];//每次讀取1024個字節(jié)到緩存 ifstream fp;//文件流

      fp.open((loc_webpage+ine_str).c_str(),std::ios::binary);//打開指定文件 if(fp.fail())cout<<”存儲文件失??!"<

      fp.getline(buffer,1024*10);//從文件中讀取1024個字節(jié)到緩沖區(qū)里面

      allchars.append(buffer);//把緩存中的字節(jié)加到allchars后面

      buffer[0]='