计算机网络课程设计之简单 Web Server 程序的设计与实现
前言
本實(shí)驗(yàn)是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的webserver,我們一直在訪問(wèn)網(wǎng)站,甚至還做過(guò)Web課程設(shè)計(jì),部署過(guò)Tomcat等等,所以說(shuō)這次實(shí)驗(yàn)?zāi)芨钊氲牧私馄湓?/p>
白嫖容易,創(chuàng)作不易,本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明!!!
源碼和可運(yùn)行程序:
鏈接:https://pan.baidu.com/s/1A9KctmpP2JJgyW2wLrehIg
提取碼:Lin2
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì):
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之Tracert與Ping程序設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之基于 IP 多播的網(wǎng)絡(luò)會(huì)議程序
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)嗅探器的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之電子郵件客戶端程序設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之TELNET 終端設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之網(wǎng)絡(luò)代理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)之簡(jiǎn)單 Web Server 程序的設(shè)計(jì)與實(shí)現(xiàn)
Qt入門(mén)系列:
Qt學(xué)習(xí)之C++基礎(chǔ)
Qt學(xué)習(xí)之Qt安裝
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(mén)(上)
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(mén)(中)
Qt學(xué)習(xí)之Qt基礎(chǔ)入門(mén)(下)
創(chuàng)作不易,整個(gè)課程設(shè)計(jì)程序3000多行代碼,所有實(shí)驗(yàn)都寫(xiě)在了一個(gè)程序中,時(shí)間有限,能力不足,轉(zhuǎn)載望注明!!!
本文鏈接
個(gè)人博客:https://ronglin.fun/archives/278
PDF鏈接:見(jiàn)博客網(wǎng)站
CSDN: https://blog.csdn.net/RongLin02/article/details/122510631
實(shí)驗(yàn)題目
簡(jiǎn)單 Web Server 程序的設(shè)計(jì)與實(shí)現(xiàn)
實(shí)驗(yàn)?zāi)康?/h1>
Web 服務(wù)是 Internet 最方便與受用戶歡迎的服務(wù)類(lèi)型,它的影響力也遠(yuǎn)遠(yuǎn)超出了專(zhuān)業(yè)技術(shù)范疇,已廣泛應(yīng)用于電子商務(wù)、遠(yuǎn)程教育、遠(yuǎn)程醫(yī)療與信息服務(wù)等領(lǐng)域,并且有繼續(xù)擴(kuò)大的趨勢(shì)。目前很多的 Internet 應(yīng)用都是基于 Web 技術(shù)的,因此掌握 Web 環(huán)境的軟件編程技術(shù)對(duì)軟件人員是至關(guān)重要的。編寫(xiě)簡(jiǎn)單的 Web Server 有助于讀者了解 Web Server 的工作流程,掌握超文本傳送協(xié)議( HTTP)基本原理,掌握 Windows 環(huán)境中用 socket 實(shí)現(xiàn) C/S 結(jié)構(gòu)程序的編程方法。附錄 5 介紹了一個(gè)簡(jiǎn)單 Web Server 的程序設(shè)計(jì)過(guò)程。
總體設(shè)計(jì)
(含背景知識(shí)或基本原理與算法、或模塊介紹、設(shè)計(jì)步驟等)
本次實(shí)驗(yàn)設(shè)計(jì)基于TCP連接,然后用HTTP協(xié)議,主要是對(duì)于HTTP頭的解析然后返回對(duì)應(yīng)的文件
先看Get請(qǐng)求的頭文件
有這么多的數(shù)據(jù)內(nèi)容,關(guān)鍵的是第一行,表示的是Get然后訪問(wèn)路徑是/協(xié)議是HTTP/1.1
之后就是一些基本的信息,例如Host訪問(wèn)地址,Connection是否保持連接等等
然后再來(lái)看一個(gè)Web Server的回應(yīng)
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122<html> ... </html>首先是對(duì)請(qǐng)求的回應(yīng),200 ok,表示成功找到路徑下的文件,然后第二行是一個(gè)RFC格式的時(shí)間戳,然后還有一些基本信息,最后就是返回的HTML的文件了。
詳細(xì)設(shè)計(jì)
(含主要的數(shù)據(jù)結(jié)構(gòu)、程序流程圖、關(guān)鍵代碼等)
原理已經(jīng)明白,下面就是設(shè)計(jì)
首先要寫(xiě)一個(gè)構(gòu)造頭的函數(shù)
提供了2種返回值,一個(gè)是找到了,另一個(gè)是沒(méi)找到。然后按照頭格式構(gòu)造
然后就是解析請(qǐng)求報(bào)文,分析請(qǐng)求路徑
QString path = data.split(" ").at(1);int result = -1;if(path == "/") //訪問(wèn)根路徑{QFile file(QDir::currentPath()+"/" +fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){emit this->sendError(QDir::currentPath()+"/" + fileName +" 打開(kāi)失敗");result = socket->write(getHeaderString(false).toUtf8());return;}QTextStream in(&file);QString fileData = in.readAll();result = socket->write((getHeaderString(true).arg(fileData.size()) + fileData +QString("\r\n")).toUtf8());this->sendData("Server Response:\r\n"+ getHeaderString(true).arg(fileData.size()) + fileData +"\r\n"); // this->sendData("Server Response:\r\n"+ getHeaderString(true) + fileData);}上如,用' '分割,然后找到第二個(gè)參數(shù),如果是/的話就是根路徑,然后返回服務(wù)器設(shè)定的根路徑文件
最后通過(guò)TCP,將頭和文件數(shù)據(jù)都返回給客戶端
實(shí)驗(yàn)結(jié)果與分析
啟動(dòng)服務(wù)器,它會(huì)輸出一個(gè)網(wǎng)站,然后用瀏覽器打開(kāi)這個(gè)網(wǎng)站,
請(qǐng)求成功
然后在軟件界面顯示調(diào)試信息
實(shí)驗(yàn)完成,但是只有一個(gè)問(wèn)題就是瀏覽器一直在請(qǐng)求轉(zhuǎn)圈,時(shí)間有限,沒(méi)找到問(wèn)題所在
小結(jié)與心得體會(huì)
Web Server太常用了,越是習(xí)以為常的東西,越不會(huì)注意到它的原理,這次通過(guò)自己設(shè)計(jì),了解了 HTTP是如何用TCP實(shí)現(xiàn)的,獲益匪淺
=w=
總結(jié)
以上是生活随笔為你收集整理的计算机网络课程设计之简单 Web Server 程序的设计与实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 华师大数据科学考研_21考研择校 | 华
- 下一篇: mysql内存报警_[MySQL生产环境