最近學習到了《深入理解計算機系統》的第11章網絡編程,在最后一節是一個名為tiny的小型web服務器的實現,源代碼書中已經給出,這里就不再復制粘貼了。這篇小博客主要記錄一下課后題10的解答。原題目為:
??? 寫出cgi adder函數的html表單。你的表單應該包括兩個文本框,用戶將需要相加的兩個數字填在這兩個文本框中。你的表單應該使用get方法請求內容。
??? 因為我以前沒接觸過html表單,先百度之,找到了w3school的html教材,看了一下表單的部分,寫出了一個很簡單的小表單,命名為index.html:
1 <!DOCTYPE html> 2 <html> 3 <body> 4 5 <p> 6 please enter two numbers:<br> 7 </p> 8 9 <form action="/cgi-bin/adder">10 The first number:11 <input type="number" name="num1"> <br>12 The second number:13 <input type="number" name="num2"> <br>14 <input type="submit" value="Submit">15 </form>16 17 </body>18 </html>
這是輸入localhost:8888之后瀏覽器顯示的效果圖。8888是我設置的tiny的端口,至于為什么沒有后邊的/index.html,是因為我在源代碼中將index.html設為了主界面。
我們可以隨便輸入兩個數字,點擊Submit按鈕,結果肯定是不對的。。
如上圖所示,結果顯示的是0。注意在該網頁的地址欄處,我們看到”localhost:8888/cgi-bin/adder?num1=22&num2=22″,看過tiny源碼我們就會知道,adder.c所要分析的數據是在&符號兩邊的純數字,也就是說,要想正確的被adder.c程序求和,地址欄應該顯示”localhost:8888/cgi-bin/adder?22&22″才對。出現上圖中的錯誤的原因就是,adder程序沒有取得兩個參數的數值大小。解決方法很簡單,只需要在adder.c程序里把兩個數字取出來就行了,整個adder.c代碼如下所示:
1 #include "net.h" 2 3 int main(void) 4 { 5 char *buf, *p; 6 char arg1[MAXLINE], arg2[MAXLINE], content[MAXLINE]; 7 char tmp[MAXLINE]; 8 int n1 = 0, n2 = 0; 9 10 if ( (buf = getenv("QUERY_String")) != NULL) {11 p = strchr(buf, '&');12 *p = ' 久久久久av无码免费网| 久久人与动人物a级毛片| 久久久久久精品成人免费图片 | 久久人人爽人人澡人人高潮AV| 99久久99久久精品国产| 思思久久99热免费精品6| 四虎亚洲国产成人久久精品| 一本色道久久综合亚洲精品| 久久996热精品xxxx| 伊人久久大香线蕉综合Av| 欧美亚洲另类久久综合| 国内精品久久国产| 青青青国产精品国产精品久久久久 | 久久精品国产精品亚洲精品| 无码人妻精品一区二区三区久久久| 2020国产成人久久精品| 久久AV无码精品人妻糸列| 人妻精品久久无码区| 国产美女久久久| 欧美亚洲日本久久精品| 伊人久久大香线蕉AV色婷婷色 | 成人综合伊人五月婷久久| 国产日韩久久免费影院| 久久天天躁狠狠躁夜夜2020一| 国产亚洲精品美女久久久| 狠狠精品干练久久久无码中文字幕| 欧美久久久久久午夜精品| 久久天天躁狠狠躁夜夜96流白浆 | 久久精品人人做人人爽电影| 久久久久亚洲AV综合波多野结衣 | 亚洲中文字幕无码一久久区| 青青草原综合久久大伊人精品| 97精品伊人久久大香线蕉app| 国产精品18久久久久久vr| 99久久成人18免费网站| 26uuu久久五月天| 久久久久久精品免费看SSS| 国产成人精品久久一区二区三区av| 亚洲精品乱码久久久久久按摩 | 国产一区二区三区久久| 精品国产99久久久久久麻豆|