计算机网络课程设计之简单 Web Server 程序的设计与实现
前言
本實驗是實現一個簡易的webserver,我們一直在訪問網站,甚至還做過Web課程設計,部署過Tomcat等等,所以說這次實驗能更深入的了解其原理
白嫖容易,創作不易,本文原創,轉載請注明!!!
源碼和可運行程序:
鏈接:https://pan.baidu.com/s/1A9KctmpP2JJgyW2wLrehIg
提取碼:Lin2
計算機網絡課程設計:
計算機網絡課程設計之網絡聊天程序的設計與實現
計算機網絡課程設計之Tracert與Ping程序設計與實現
計算機網絡課程設計之基于 IP 多播的網絡會議程序
計算機網絡課程設計之網絡嗅探器的設計與實現
計算機網絡課程設計之電子郵件客戶端程序設計與實現
計算機網絡課程設計之TELNET 終端設計與實現
計算機網絡課程設計之網絡代理服務器的設計與實現
計算機網絡課程設計之簡單 Web Server 程序的設計與實現
Qt入門系列:
Qt學習之C++基礎
Qt學習之Qt安裝
Qt學習之Qt基礎入門(上)
Qt學習之Qt基礎入門(中)
Qt學習之Qt基礎入門(下)
創作不易,整個課程設計程序3000多行代碼,所有實驗都寫在了一個程序中,時間有限,能力不足,轉載望注明!!!
本文鏈接
個人博客:https://ronglin.fun/archives/278
PDF鏈接:見博客網站
CSDN: https://blog.csdn.net/RongLin02/article/details/122510631
實驗題目
簡單 Web Server 程序的設計與實現
實驗目的
Web 服務是 Internet 最方便與受用戶歡迎的服務類型,它的影響力也遠遠超出了專業技術范疇,已廣泛應用于電子商務、遠程教育、遠程醫療與信息服務等領域,并且有繼續擴大的趨勢。目前很多的 Internet 應用都是基于 Web 技術的,因此掌握 Web 環境的軟件編程技術對軟件人員是至關重要的。編寫簡單的 Web Server 有助于讀者了解 Web Server 的工作流程,掌握超文本傳送協議( HTTP)基本原理,掌握 Windows 環境中用 socket 實現 C/S 結構程序的編程方法。附錄 5 介紹了一個簡單 Web Server 的程序設計過程。
總體設計
(含背景知識或基本原理與算法、或模塊介紹、設計步驟等)
本次實驗設計基于TCP連接,然后用HTTP協議,主要是對于HTTP頭的解析然后返回對應的文件
先看Get請求的頭文件
有這么多的數據內容,關鍵的是第一行,表示的是Get然后訪問路徑是/協議是HTTP/1.1
之后就是一些基本的信息,例如Host訪問地址,Connection是否保持連接等等
然后再來看一個Web Server的回應
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>首先是對請求的回應,200 ok,表示成功找到路徑下的文件,然后第二行是一個RFC格式的時間戳,然后還有一些基本信息,最后就是返回的HTML的文件了。
詳細設計
(含主要的數據結構、程序流程圖、關鍵代碼等)
原理已經明白,下面就是設計
首先要寫一個構造頭的函數
提供了2種返回值,一個是找到了,另一個是沒找到。然后按照頭格式構造
然后就是解析請求報文,分析請求路徑
QString path = data.split(" ").at(1);int result = -1;if(path == "/") //訪問根路徑{QFile file(QDir::currentPath()+"/" +fileName);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){emit this->sendError(QDir::currentPath()+"/" + fileName +" 打開失敗");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);}上如,用' '分割,然后找到第二個參數,如果是/的話就是根路徑,然后返回服務器設定的根路徑文件
最后通過TCP,將頭和文件數據都返回給客戶端
實驗結果與分析
啟動服務器,它會輸出一個網站,然后用瀏覽器打開這個網站,
請求成功
然后在軟件界面顯示調試信息
實驗完成,但是只有一個問題就是瀏覽器一直在請求轉圈,時間有限,沒找到問題所在
小結與心得體會
Web Server太常用了,越是習以為常的東西,越不會注意到它的原理,這次通過自己設計,了解了 HTTP是如何用TCP實現的,獲益匪淺
=w=
總結
以上是生活随笔為你收集整理的计算机网络课程设计之简单 Web Server 程序的设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华师大数据科学考研_21考研择校 | 华
- 下一篇: android 本地ip获取,【andr