freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

復(fù)件簡(jiǎn)易web服務(wù)器研究—vc畢業(yè)設(shè)計(jì)—計(jì)算機(jī)畢業(yè)設(shè)計(jì)-文庫吧資料

2024-12-11 20:48本頁面
  

【正文】 tening) { // 關(guān)閉偵聽 ()。 } (FALSE)。m_ListInfo, 主程序: , e)。 } catch(CMyBlockSocketException* e) { // 開啟服務(wù)的代碼出現(xiàn)異常 // 關(guān)閉偵聽端口 ()。 // 在 ListBox 中加入信息 (HTTP 服務(wù)器開始工作! )。 //創(chuàng)建服務(wù)器工作線程 AfxBeginThread(ServerThreadProc,amp。 g_bListening = TRUE。 //綁定地址 (saServer)。 } else { // 使用指定 ip saServer = CSocketAddress(g_strIPServer, (USHORT) g_nPortServer)。 開始偵聽: void CHttpServerDlg::OnStartServer() { try { CSocketAddress saServer。 關(guān)閉窗口:關(guān)閉服務(wù)器窗口。 停止偵聽:服務(wù)器停止工作。服務(wù)器開始偵聽客戶端瀏覽器的 WEB 頁面請(qǐng)求。靜態(tài)文本框( 服務(wù)器路徑)顯示該服務(wù)路徑。這三個(gè)函數(shù)都為工作線程 Serverthread 服務(wù)。還有很多很多的錯(cuò)誤也同樣使用這樣的方法,如綁定地址,偵聽連接,發(fā)送數(shù)據(jù)等等,這一系列的錯(cuò)誤都應(yīng)當(dāng)處理。 24 圖 返回默認(rèn)主頁 服務(wù)器工作線程函數(shù) Blocksock 該線程函數(shù)是針對(duì)服務(wù)器工作中的異常處理,主要包括錯(cuò)誤信息函數(shù),及事件處理函數(shù)。如圖 。 之后我們?cè)跒g覽 器的地址欄中輸入我們所架設(shè)的服務(wù)器的地址,那樣就將我們發(fā)送的請(qǐng) 23 求發(fā)送給服務(wù)器,服務(wù)器就會(huì)記錄下訪問者的地址,時(shí)間以及請(qǐng)求的信息,這些信息都會(huì)顯示在 LISTBOX中,具體信息如圖 。 首先我們運(yùn)行服務(wù)器,并開始開啟 WEB服務(wù)器功能如圖 。 22 圖 Serverthread流程圖 圖中很清晰的描述了服務(wù)器工作線程函數(shù) Serverthread 的流程,此設(shè)計(jì)為簡(jiǎn)易的 WEB服務(wù)器所以只對(duì) HTML請(qǐng)求的第一行就行分析,對(duì)于剩下部分不做分析,還有該 HTTP服務(wù)器還不能對(duì) CGI請(qǐng)求做出響應(yīng),也不能調(diào)用相應(yīng)的 ISAPI的 DLL(動(dòng)態(tài)連接庫 )。最后實(shí)現(xiàn)的 HTTP 服務(wù)器具有一般 HTTP服務(wù)器最基本的功能,可以發(fā)布用 HTML 語言編寫的網(wǎng)頁,用戶可以在已經(jīng)建立了連接的若干個(gè)網(wǎng)頁之間切換瀏覽。所以本人所設(shè)計(jì)的 主干程序?yàn)榉?wù)器工作線程函數(shù) Serverthread,它主要用于 接受客戶請(qǐng)求的時(shí)候,利用多線程來進(jìn)行處理。 參數(shù): s: Socket 的識(shí)別碼 buf:存放接收到的資料的暫存區(qū) len buf:的長(zhǎng)度 flags:此函數(shù)被調(diào)用的方式 對(duì) Stream Socket 言,我們可以接收到目前 input buffer 內(nèi)有效的資料,但其數(shù)量不超過len 的大小。 flags 的值可設(shè)為 0 或 MSG_DONTROUTE 及 MSG_OOB 的組合 。 參數(shù): s: Socket 的識(shí)別碼 buf:存放要傳送的資料的暫存區(qū) len buf:的長(zhǎng)度 flags:此函數(shù)被調(diào)用的方式 對(duì)于 Datagram Socket 而言,若是 datagram 的大小超過限制,則將不會(huì)送出任何資料,并會(huì)傳回錯(cuò)誤值。 一般情況下TCP Socket 的數(shù)據(jù)發(fā)送和接收是調(diào)用 send() 及 recv() 這兩個(gè)函數(shù)來達(dá)成,而 UDP Socket 則是用 sendto() 及 recvfrom() 這兩個(gè)函數(shù),這兩個(gè)函數(shù)調(diào)用成功發(fā) 回 發(fā)送或接收的資料的長(zhǎng)度,否則返回 SOCKET_ERROR。先介紹一下TCP socket 與 UDP socket 在傳送數(shù)據(jù)時(shí)的特性 : Stream (TCP) Socket 提供雙向、可靠、 有次序、不重復(fù)的資料傳送 ; Datagram (UDP) Socket 雖然提供雙向的通信,但沒有可靠、有次序、不重復(fù)的保證,所以 UDP 傳送數(shù)據(jù)可能會(huì)收到無次序、重復(fù)的資料,甚至資料在傳輸過程中出現(xiàn)遺漏。 (二)提出連接申請(qǐng) 客戶端的 Socket 使用 connect()函數(shù)來提出與服務(wù)器端的 Socket 建立連接的申請(qǐng),函數(shù)調(diào)用成功返回 0,否則返回 SOCKET_ERROR。 客戶端 Socket 的操作 (一)建立客戶端的 Socket 客戶端應(yīng)用程序首先也是調(diào)用 WSAStartup() 函數(shù)來與 Winsock 的動(dòng)態(tài)連接庫建立關(guān)系,然后同樣調(diào)用 socket() 來建立一個(gè) TCP 或 UDP socket(相同協(xié)定的 sockets 才能相通, TCP 對(duì) TCP, UDP 對(duì) UDP)。另外,與程序啟動(dòng)時(shí)調(diào)用 WSAStartup()憨數(shù)相對(duì)應(yīng),程式結(jié)束前,需要調(diào)用 WSACleanup() 來通知 Winsock Stack釋放 Socket 所占用的資源。該函數(shù)調(diào)用成功返回一個(gè)新產(chǎn)生的 Socket 對(duì)象, 否則返回 INVALID_SOCKET。 … } (五 ) 服務(wù)器端接受客戶端的連接請(qǐng)求 當(dāng) Client 提出連接請(qǐng)求時(shí), Server 端 hwnd視窗會(huì)收到 Winsock Stack 送來我們自定義的 19 一個(gè)消息,這時(shí),我們可以分析 lParam,然后調(diào)用相關(guān)的函數(shù)來處理此事件。所以,可以在窗口處理自定義消息函數(shù)中使用以下結(jié)構(gòu)來響應(yīng)Socket 的不同事件: switch(lParam) { case FD_READ: … break。 參數(shù): s: Socket 對(duì)象; hWnd :接收消息的窗口句柄; wMsg:傳給窗口的消息; lEvent:被注冊(cè)的網(wǎng)絡(luò)事件,也即是應(yīng)用程序向窗口發(fā)送消息的網(wǎng)路事件,該值為下 列值 FD_READ、 FD_WRITE、 FD_OOB、 FD_ACCEPT、 FD_CONNECT、 FD_CLOSE 的組合,各個(gè)值的具體含意為 FD_READ:希望在套接字 S 收到數(shù)據(jù)時(shí)收到 消息; FD_WRITE:希望在套接字 S 上可以發(fā)送數(shù)據(jù)時(shí)收到消息; FD_ACCEPT:希望在套接字 S 上收到連接請(qǐng)求時(shí)收到消息; FD_CONNECT:希望在套接字 S 上連接成功時(shí)收到消息; FD_CLOSE:希望在套接字 S上連接關(guān)閉時(shí)收到消息; FD_OOB:希望在套接字 S 上收到帶外數(shù)據(jù)時(shí)收到消息。該函數(shù)調(diào)用成功返回 0,否則返回 SOCKET_ERROR。 參 數(shù): s:需要建立監(jiān)聽的 Socket; backlog:最大連接個(gè)數(shù); 服務(wù)器端的 Socket調(diào)用完 listen()后,如果此時(shí)客戶端調(diào)用 connect()函數(shù)提出連接申請(qǐng)的話, Server 端必須再調(diào)用 accept() 函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動(dòng)作。該函數(shù)調(diào)用成功返回 0,否則返回 SOCKET_ERROR。 (四) 監(jiān)聽 當(dāng)服務(wù)器端的 Socket 對(duì)象綁定完成之后 ,服務(wù)器端必須建立一個(gè)監(jiān)聽的隊(duì)列來接收客戶端的連接請(qǐng)求。 參 數(shù): s: Socket 對(duì)象名; name: Socket 的地址值,這個(gè)地址必須是執(zhí)行這個(gè)程式所在機(jī)器的 IP 地址; namelen: name 的長(zhǎng)度; 如果使用者不在意地址或端口的值,那么可以設(shè)定地址為 INADDR_ANY,及 Port 為 0,Windows Sockets 會(huì)自動(dòng)將其設(shè)定適當(dāng)之地址及 Port (1024 到 5000 之 間的值 )。 (三) 綁定端口 接下來要為服務(wù)器端定義的這個(gè)監(jiān)聽的 Socket 指定一個(gè)地址及端口( Port),這樣客戶端才知道待會(huì)要連接哪一個(gè)地址的哪個(gè)端口,為此我們要調(diào)用 bind()函數(shù),該函數(shù)調(diào)用成功返回 0,否則返回 SOCKET_ERROR。 此 函 數(shù) 調(diào) 用 成 功 返 回 Socket 對(duì) 象 , 失 敗 則 返 回INVALID_SOCKET(調(diào)用 WSAGetLastError()可得知原因,所有 WinSocket 的函數(shù) 都可以使用這個(gè)函數(shù)來獲取失敗的原因 )。WSAData),其中 (18|1)表示我們用的是 版本, WSAata 用來存儲(chǔ)系統(tǒng)傳回的關(guān)于 WinSocket 的資料。 偵聽模塊設(shè)計(jì) 服務(wù)器端操作 Socket(套接字) (一) 在初始化階段調(diào)用 WSAStartup() 此函數(shù)在應(yīng) 用程序中初始化 Windows Sockets DLL,只有此函數(shù)調(diào)用成功后,應(yīng)用程序才可以再調(diào)用其他 Windows Sockets DLL中的 API函數(shù)。首先新建一個(gè) MFC Appwizard(exe)工程 ,然后建立一個(gè)對(duì)話框。其次,界面越出色,用戶就喜歡使用,增強(qiáng)了開發(fā)者工作的滿意度。界面設(shè)計(jì)的重要性有這么幾個(gè)原因:首先,用戶界面越直觀,就越易用,越易用就越便宜。 16 第四章 系統(tǒng)設(shè)計(jì) 界面設(shè)計(jì) 界面設(shè)計(jì)要求 對(duì)于應(yīng)用軟件來說,一個(gè)基本現(xiàn)實(shí)就是:用戶界面是面向用戶的。跟其他的可視化集成開發(fā)環(huán)境(如 Visual Basic、 Delphi、 C++ Builder)一樣, Visual C++ 集程序的代碼編輯、編譯、連接和調(diào)試等功能于一體,給編程 人員提供了一個(gè)完整方便的開發(fā)界面和許多有效的輔助開發(fā)工具。對(duì)于這一特點(diǎn),數(shù)據(jù)報(bào)套接口采用了與現(xiàn)在許多包交換網(wǎng)絡(luò)(例如以太網(wǎng))非常類似的模型。也就是說,一個(gè)從數(shù)據(jù)報(bào)套接口接收信息的進(jìn)程有可能發(fā)現(xiàn)信息重復(fù)了,或者和發(fā)出時(shí)的順序不同。流套接口提供了雙向的,有序的,無重復(fù)并且無記錄邊界的數(shù)據(jù)流服務(wù)。不過只要底層的通訊協(xié)議允許,不同類型的套接口間也照樣可以通訊。 套接口可以根據(jù)通訊性質(zhì)分類;這種性質(zhì)對(duì)于用戶是可見的。 Windows Sockets 規(guī)范支持單一的通訊域,即 Inter域。通信區(qū)域也叫地址族,它是一個(gè)抽象的概念,主要用于將通過套接口通信的進(jìn)程的共有特性綜合在一起。套接口是可以被命名和尋址的通信端點(diǎn),使用中的每一個(gè)套接字都有它的類型和一個(gè)與之相連的進(jìn)程。 現(xiàn)在大多的網(wǎng)絡(luò)編程的規(guī)范已經(jīng)是 Windows Socket 2,它在 ,具體的改動(dòng)在這里也不做具體的介紹了。 Windows Sockets 包含了一些更加清晰的說明和對(duì) Windows Sockets 。 為了更能滿足個(gè)系統(tǒng)的要求,有發(fā)布了之后的 版本 Windows Sockets 繼承了Windows Sockets ,并且僅在一些絕對(duì)必要的地方作了改動(dòng)。 圖 應(yīng)用程序與 sockets 的關(guān) 系 14 Windows Sockets 規(guī)范發(fā)展歷程 Windows Sockets 規(guī)范發(fā)展至今已經(jīng)經(jīng)歷了三個(gè)階段,首先是 Windows 的發(fā)布, Windows Sockets 代表了網(wǎng)絡(luò)軟件供應(yīng)商和用戶協(xié)會(huì)細(xì)致周到的工作的結(jié)晶。 Windows Sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。這個(gè)規(guī)范不僅包含了我們所熟悉的 Berkeley Socket 套接口風(fēng)格的庫函數(shù),也包含了針對(duì) Windows 的擴(kuò)展庫函數(shù),這樣一來使程序員能充分利用 Windows消息驅(qū)動(dòng)機(jī)制進(jìn)行相應(yīng)的編程。這個(gè)模型現(xiàn)在已是 TCP/IP網(wǎng)絡(luò)的標(biāo)準(zhǔn)。從1991年的 1995年的 ,經(jīng)過不斷完善并在 Intel、 Microsoft、 Sun、 SGI、Informix、 Novell等公司的全力支持下,已成為 Windows網(wǎng)絡(luò)編程上的標(biāo)準(zhǔn)。 構(gòu)造響應(yīng) 如前文所述,響應(yīng)的第 1行是狀態(tài)行,非常重要,格式如下: HTTP 版本號(hào) 狀態(tài)碼 狀態(tài)文字說明 回車換行 版本號(hào)可取 HTTP/;狀態(tài)碼是 3位數(shù)字,根據(jù)情況按表 。 POST:用來處理網(wǎng)頁的附屬內(nèi)容,比如“注解” 、數(shù)據(jù)回送等。有時(shí)還必須根據(jù)“請(qǐng)求”的要求先對(duì)內(nèi)容做一定的處理 (比如解壓縮或根據(jù)時(shí)間進(jìn)行過濾 )。 11 WEB 服務(wù)器 /瀏覽器的通信 要 完成 WEB服務(wù),除了網(wǎng)絡(luò)通信鏈路的建立和拆除之外至少還要有兩方面的功能:“分析請(qǐng)求”和“構(gòu)造響應(yīng)”。第 2部分為數(shù)據(jù)“體”,是“請(qǐng)求”要求傳送的數(shù)據(jù),它跟在 1個(gè)空行之后。 (瀏覽器接到文件內(nèi)容后就將其中的內(nèi)容顯示出來了 )比如對(duì)于文件長(zhǎng)度為 2559B的 ,可以發(fā)送如下數(shù)據(jù)作為“響應(yīng)”: HTTP/ 200 OK Server: Date:WED,20 may 2020 12:45:21 Contenttype:text/html Contentlength:2559 LastModified:Sun,22 may 2020 14:21:50 接下來是 上述數(shù)據(jù)分 2 大部分,第 1部分為“頭”,其中,第 1行是狀態(tài)行,包括服務(wù)器執(zhí)行的HTTP 版本及本次響應(yīng)的狀態(tài)碼。比如用戶輸入 (1) 計(jì)算機(jī)名稱為 (2) 端口號(hào)為 80( 服務(wù)的默認(rèn)端口號(hào)) (3) 頁面的文件名為 瀏覽器就與 kulin上端口號(hào)為 80的服務(wù)程序建立連接,并把類似下面的數(shù) 圖 Web 工作原理 10 據(jù)發(fā)過(作為服務(wù)‘請(qǐng)求’): GET / HTTP/ Ac
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1