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

正文內容

智能家庭網關的開發(fā)與應用畢業(yè)論文(編輯修改稿)

2025-07-25 04:42 本頁面
 

【文章內容簡介】 appname (apptype tinyint check(apptype=0 and apptype5), 家電類型roomid tinyint, 房間編號appid tinyint check(appid=0 and appid256), 家電編號,每房間可有256個家電appname varchar(20) not null, 家電名稱routeid smallint check(routeid=0 and routeid16) not null, 轉發(fā)器編號primary key(roomid,appid))。示例數(shù)據:INSERT INTO appname VALUES(1,1,0,39。海爾空調39。,14)。 在客廳添加“海爾空調”INSERT INTO appname VALUES(4,2,0,39。北窗簾39。,12)。 在飯廳添加“北窗簾”5) appctrlinfo表該表用于存放各個家電設備已經學習的遙控指令信息。CREATE TABLE appctrlinfo(appcmd int, 已學習的遙控指令,4個字節(jié)長度cmdindex tinyint, 該指令在當前家電指令列表中的索引號appid tinyint check(appid=0 and appid256), 家電編號roomid tinyint, 房間編號apptype tinyint check(apptype=0 and apptype5), 家電類型primary key(roomid,appid,cmdindex))。示例數(shù)據:INSERT INTO appctrlinfo VALUES(1667457891,0,0,1,1)。 /*客廳中“海爾空調”的“開/關”遙控指令信息*/INSERT INTO appctrlinfo VALUES(1734702945,0,0,2,4)。 /*飯廳中“北窗簾”的“開”遙控指令信息*/6) switchinfo表該表用于存放目前已添加的燈光開關設備的信息。CREATE TABLE switchinfo (roomid tinyint not null, 房間編號swid smallint check(swid=0 and swid4096), 遙控器地址,12位keyid tinyint check(keyid=0 and keyid16), 遙控器按鍵編號,0~15routeid tinyint check(routeid=0 and routeid16), 轉發(fā)器編號swname varchar(20), 燈光開關名稱primary key(roomid,swid,keyid,routeid,swname))。示例數(shù)據:INSERT INTO switchinfo VALUES(1,4,7,14,39。測試燈光39。)。 客廳中添加“測試燈光”INSERT INTO switchinfo VALUES(1,2,1,14,39。test39。)。 客廳中添加“test”7) userpwd表該表用于存放用戶設置的普通密碼、超級密碼和安防密碼的md5碼。CREATE TABLE userpwd (pwdtype smallint primary key, 密碼類型,1普通密碼,2超級密碼,3安防密碼pwd char(32))。 密碼的md5碼示例數(shù)據:INSERT INTO userpwd VALUES(1,39。e10adc3949ba59abbe56e057f20f883e39。)。 普通密碼INSERT INTO userpwd VALUES(2,39。e10adc3949ba59abbe56e057f20f883e39。)。 超級密碼8) defvalues表該表用于存放網關的默認設置參數(shù),以便于用戶恢復出廠設置。CREATE TABLE defvalues (key varchar[20], 設置名value varchar[50])。 設置默認值示例數(shù)據:INSERT INTO defvalues VALUES(39。userpwd39。,39。e10adc3949ba59abbe56e057f20f883e39。)。默認普通密碼的md5碼INSERT INTO defvalues VALUES(39。safepwd39。,39。e10adc3949ba59abbe56e057f20f883e39。)。默認超級密碼的md5碼至此,目前網關所需使用到的數(shù)據表已全部創(chuàng)建完畢。 后臺程序設計與實現(xiàn)所謂的后臺程序主要指運行與后臺的CGI腳本程序。本節(jié)主要就CGI腳本的設計和實現(xiàn)原理、方法等進行詳細論述。 CGI與客戶端的通訊機制客戶端瀏覽器通過Ajax技術來發(fā)送CGI請求,那么作為后臺響應的CGI腳本是如何提取隨同CGI請求一起發(fā)送的參數(shù)數(shù)據呢?CGI腳本又是如何將響應數(shù)據發(fā)送給客戶端瀏覽器的呢?例如,客戶端通過Ajax發(fā)出如下CGI請求:“cgibin/?roomid=1”。=1的呢?CGI腳本又是如何將處理好的房間1的燈光設備列表數(shù)據發(fā)送給客戶端瀏覽器的呢?這就是本小節(jié)討論的重點。1. 客戶端傳輸數(shù)據的獲取事實上,當服務端守護進程接收到客戶端用戶代理(如瀏覽器)提交的CGI請求時,所創(chuàng)建的CGI子進程會設置與CGI請求內容有關的環(huán)境變量,并建立服務器與外部CGI程序之間通訊的通道(即標準I/O)。CGI程序可以通過環(huán)境變量、標準I/O或命令行參數(shù)獲取客戶端用戶輸入的數(shù)據??蛻舳藗鬏敂?shù)據的具體獲取方法和用戶所使用的請求方式(GET或POST方法)有關。1) 獲取環(huán)境變量環(huán)境變量的類別很多,包含客戶端和服務端的詳細信息。在一般CGI程序開發(fā)中,下述幾個環(huán)境變量在數(shù)據傳遞中起著重要作用。l GATEWAYINTERFACECGI程序所使用的CGI標準接口的版本號。如使用的CGI1.1版,該變量表示為“CGI/”l REQUESTMETHODHTTP請求方法。根據該變量值可判斷CGI請求所采用的請求方法,以決定是通過stdin還是通過環(huán)境變量QUERYSTRING獲取客戶端傳輸數(shù)據。l QUERYSTRINGQUERYSTRING是CGI程序URL中“?”之后的數(shù)據。當使用ISINDEX查詢或FORM表使用GET方法時,客戶端傳輸數(shù)據可以通過讀取該變量而獲得。l CONTENTLENGTHCONTENTLENGTH表示客戶端傳輸數(shù)據的字節(jié)數(shù)。l CONTENTTYPECONTENTTYPE表示客戶端傳輸數(shù)據的數(shù)據編碼類型。利用environ(int)函數(shù)可以獲得所有的環(huán)境變量及其值;利用getenv(constchar*)函數(shù)可以獲得指定環(huán)境變量的相應值。2) HTTP請求方法客戶端用戶代理提交的CGI請求是HTTP請求,其中包括HTTP請求方法。HTTP協(xié)議定義的請求方法中常用的主要有GET和POST。如果客戶端使用GET方法,CGI程序通過環(huán)境變量QUERYSTRING獲取客戶端傳輸數(shù)據。如果客戶端使用POST方法,CGI程序通過CONTENTLENGTH獲取客戶端傳輸數(shù)據的字節(jié)數(shù),通過stdin讀取客戶端傳輸數(shù)據。2. 有效數(shù)據的提取和處理通過上述方法就可以獲取CGI請求中“?”以后的字符串,該字符串一般形如:name[1]=value[1]amp。name[2]=value[2]amp。......amp。name[n]=value[n],其中name[i]表示變量名,value[i]表示變量值。很顯然,我們只要通過適當?shù)淖址幚砗瘮?shù)(如strtok函數(shù))就可以依次分離出各個鍵值對字符串數(shù)組。3. 向客戶端返回應答CGI程序處理結束后,通過標準輸出流將應答信息傳遞給服務器,再由服務器返回給發(fā)出請求的客戶端。其輸出的應答信息是HTTP應答消息,它一般由兩部分組成:應答頭和應答數(shù)據。常見的應答頭包括三種頭域:ContentType(數(shù)據編碼類型,用MIME類型表示),Location(特定文檔的URL,這種情況不直接向客戶端輸出內容而輸出該URL)和Status(處理結果的狀態(tài)碼和狀態(tài)描述)。HTTP應答頭由幾行格式相同的文本構成,每行的基本格式為:“頭域名:該域內容”。應答頭和應答體之間用一空行分隔。應答體為CGI擴展程序的輸出數(shù)據,其數(shù)據類型應該與ContentType值相一致。CGI程序的輸出可以用printf()、puts()等標準I/O函數(shù)來實現(xiàn)。4. 程序實現(xiàn)為了實現(xiàn)上述提取CGI請求數(shù)據的方法,相應的程序實現(xiàn)如下:/**將雙字16進制字符串轉換為單個ASCII字符**/char x2c(char *what) { register char digit。 digit = (what[0] = 39。A39。 ? ((what[0] amp。 0xdf) 39。A39。)+10 : (what[0] 39。039。))。 digit *= 16。 digit += (what[1] = 39。A39。 ? ((what[1] amp。 0xdf) 39。A39。)+10 : (what[1] 39。039。))。 return(digit)。}/**將經過編碼而發(fā)生轉義的字符串轉換為常規(guī)ASCII字符串**/void unescape_url(char *url) { register int i,j。 for(i=0,j=0。 url[j]。 ++i,++j) { if((url[i] = url[j]) == 39。%39。) { url[i] = x2c(amp。url[j+1]) 。 j+= 2 。 } } url[i] = 39。\039。 。}/**讀取CGI請求的字符串,并返回包含所有鍵值對字符串的字符串數(shù)組**//**返回的字符串數(shù)組包含:name1, value1, name2, value2, ... , NULL **/char **getcgivars() { register int i 。 char *request_method 。 int content_length。 char *cgiinput 。 char **cgivars 。 char **pairlist 。 int paircount 。 char *nvpair 。 char *eqpos 。/**根據請求方式,讀取所有的CGI請求字符串到cgiinput中**/request_method= getenv(REQUEST_METHOD) 。//GET方式 if (!strcmp(request_method, GET) || !strcmp(request_method, HEAD) ) { /* 如果請求字符串為空,一些服務器會不提供QUERY_STRING環(huán)境變量,所以要避免getenv(QUERY_STRING)返回NULL的情況*/ char *qs 。 qs= getenv(QUERY_STRING) 。 //從QUERY_STRING環(huán)境變量獲取請求字符串 cgiinput= strdup(qs ? qs : ) 。 } else if (!strcmp(request_method, POST)) { //POST方式 if ( strcasecmp(getenv(CONTENT_TYPE), application/xformurlencoded)) { printf(ContentType: text/plain\n\n) 。 printf(getcgivars(): Unsupported ContentType.\n) 。 exit(1) 。 } if ( !(content_length = atoi(getenv(CONTENT_LENGTH))) ) { printf(ContentType: text/plain\n\n) 。 printf(getcgivars(): No ContentLength was sent with the POST request.\n) 。 exit(1) 。 } if ( !(cgiinput= (char *) malloc(content_length+1)) ) { printf(ContentType: text/plain\n\n) 。 printf(getcgivars(): Couldn39。t malloc for cgiinput.\n) 。 exit(1) 。 } if (!fread(cgiinput, content_length, 1, stdin)) { //從stdin(標準輸入)讀入數(shù)據 printf(ContentType: text/plain\n\n) 。 printf(getcgivars(): Couldn39。t read CGI input from STDIN.\n) 。
點擊復制文檔內容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1