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

正文內(nèi)容

基于uip協(xié)議的web服務(wù)器的軟件設(shè)計(jì)(編輯修改稿)

2025-06-19 18:22 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 應(yīng)用接口 ,:減少處理函數(shù)的個(gè)數(shù)和調(diào)用次數(shù),提高代碼復(fù)用率以減少ROM占用;基于單一全局?jǐn)?shù)組的收發(fā)數(shù)據(jù)緩沖區(qū),不支持內(nèi)存動(dòng)態(tài)分配,由應(yīng)用負(fù)責(zé)處理收發(fā)的數(shù)據(jù);基于事件驅(qū)動(dòng)的應(yīng)用程序接口,各并發(fā)連接采用輪循處理,僅當(dāng)網(wǎng)絡(luò)事件發(fā)生時(shí),由uIP 內(nèi)核喚起應(yīng)用程序處理。這樣,uIP 用戶只須關(guān)注特定應(yīng)用就可以了。傳統(tǒng)的TCP/IP 實(shí)現(xiàn)一般要基于多任務(wù)處理環(huán)境,而大多數(shù)8 位機(jī)系統(tǒng)不具備這個(gè)條件;應(yīng)用程序主動(dòng)參與部分協(xié)議棧功能的實(shí)現(xiàn)(如TCP的重發(fā)機(jī)制 數(shù)據(jù)包分段和流量控制),由uIP 內(nèi)核設(shè)置重發(fā)事件,應(yīng)用程序重新生成數(shù)據(jù)提交發(fā)送,免去了大量?jī)?nèi)部緩存的占用?;谑录?qū)動(dòng)的應(yīng)用接口使得這些實(shí)現(xiàn)較為簡(jiǎn)單。 uip的設(shè)備程序接口uIP 內(nèi)核中有兩個(gè)函數(shù)直接需要底層設(shè)備驅(qū)動(dòng)程序的支持。一個(gè)是uip_input()。當(dāng)設(shè)備驅(qū)動(dòng)程序從網(wǎng)絡(luò)層收到一個(gè)數(shù)據(jù)包時(shí)要調(diào)用這個(gè)函數(shù),設(shè)備驅(qū)動(dòng)程序必須事先將數(shù)據(jù)包存放到uip_buf[]中,包長(zhǎng)放到uip_len 然后交由uip_input()處理。當(dāng)函數(shù)返回時(shí),如果uip_len不為0,則表明有帶外數(shù)據(jù)(如SYN ACK 等)要發(fā)送,當(dāng)需要ARP支持時(shí),還需要考慮更新ARP 表或發(fā)出ARP 請(qǐng)求和回應(yīng)。示例如下:define BUF ((struct uip_eth_hdr *)amp。uip_buf[0])uip_len = ethernet_devicedriver_poll()。 //接收以太網(wǎng)數(shù)據(jù)包//(設(shè)備驅(qū)動(dòng)程序)if(uip_len0){ //收到數(shù)據(jù) if(BUFtype = = HTONS(UIP_ETHTYPE_IP)) { //是IP包嗎 uip_arp_ipin()。 //去除以太網(wǎng)頭結(jié)//構(gòu)更新ARP表 uip_input()。 //IP包處理if(uip_len0){ //有帶外回應(yīng)數(shù)據(jù)uip_arp_out()。 //加以太網(wǎng)頭結(jié)構(gòu)在主動(dòng)//連接時(shí)可能要構(gòu)造ARP請(qǐng)求ethernet_devicedriver_send()。 //發(fā)送數(shù)據(jù)到以太網(wǎng)//(設(shè)備驅(qū)動(dòng)程序) } }else if (BUFtype = = HTONS(UIP_ETHTYPE_ARP)) {//是ARP請(qǐng)求包 uip_arp_arpin()。 //如是是ARP回應(yīng)更新ARP表//請(qǐng)求 構(gòu)造回應(yīng)數(shù)據(jù)包 if(uip_len0) { //是ARP請(qǐng)求 要發(fā)送回應(yīng)ethernet_devicedriver_send()。 //發(fā)ARP回應(yīng)到以太網(wǎng)上 } }另一個(gè)需要驅(qū)動(dòng)程序支持的函數(shù)是uip_periodic(conn)。這個(gè)函數(shù)用于uIP內(nèi)核對(duì)各連接的定時(shí)輪循,因此需要一個(gè)硬件支持的定時(shí)程序周期性地用它輪循各連接。一般用于檢查主機(jī)是否有數(shù)據(jù)要發(fā)送,如有,則構(gòu)造IP 包。使用示例如下:for(i=0 。 iUIP_CONNS。 i++){ uip_periodic(i)。 if(uip_len 0){ uip_arp_out()。 ethernet_devicedriver_send()。 }}從本質(zhì)上來(lái)說(shuō) ,uip_input()和uip_periodic()在內(nèi)部是一個(gè)函數(shù),即uip_process(u8t flag) 。UIP的設(shè)計(jì)者將uip_process(UIP_DATA)定義成uip_input(),而將uip_process(UIP_TIMER)定義成uip_periodic()。因此從代碼實(shí)現(xiàn)上來(lái)說(shuō)是完全復(fù)用的。 uip的應(yīng)用程序接口為了將用戶的應(yīng)用程序掛接到uIP中,必須將宏UIP_APPCALL()定義成實(shí)際的應(yīng)用程序函數(shù)名。這樣,每當(dāng)某個(gè) uIP 事件發(fā)生時(shí),內(nèi)核就會(huì)調(diào)用該應(yīng)用程序進(jìn)行處理。如果要加入應(yīng)用程序狀態(tài)的話,必須將宏UIP_APPSTATE_SIZE 定義成應(yīng)用程序狀態(tài)結(jié)構(gòu)體的長(zhǎng)度,在應(yīng)用程序函數(shù)中,依靠uIP 事件檢測(cè)函數(shù)來(lái)決定處理的方法。另外可以通過(guò)判斷當(dāng)前連接的端口號(hào)來(lái)區(qū)分處理不同的連接。下面的示例程序是一個(gè)Web 服務(wù)器應(yīng)用的框架:define UIP_APPCALL uip51_appcalldefine UIP_APPSTATE_SIZE sizeof(struct uip51app_state)struct uip51app_state{ unsigned char *dataptr。 unsigned int dataleft。}。void uip51_initapp{ //設(shè)置主機(jī)地址u16_t ipaddr[2]。uip_ipaddr(ipaddr 202 120 127 192 )。uip_sethostaddr(ipaddr)。uip_listen(HTTP_PORT)。 //HTTP WEB PORT(80)。}void uip51_appcall(void){ struct uip51app_state
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1