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

正文內(nèi)容

滑動窗口協(xié)議模擬程序的設(shè)計與實現(xiàn)(編輯修改稿)

2024-09-07 03:46 本頁面
 

【文章內(nèi)容簡介】 續(xù)送來的正確的幀雖然不能立即遞交給接收方的高層,但接收方仍可收下來,存放在一個緩沖區(qū)中,同時要求發(fā)送方重新傳送出錯的那一幀。一旦收到重新傳來的幀后,就可以原已存于緩沖區(qū)中的其余幀一并按正確的順序遞交高層。這種方法稱為選擇重發(fā)(SELECTICE REPEAT),其工作過程如圖所示。顯然,選擇重發(fā)減少了浪費,但要求接收方有足夠大的緩沖區(qū)空間。圖32 選擇重傳協(xié)議原理圖 發(fā)送方與接收方設(shè)計流程由于我設(shè)計的程序為模擬程序,因此我把發(fā)送方和接收方集合在同一版面上。它們各自的功能同時在同一版面上實現(xiàn)及顯示。在程序?qū)崿F(xiàn)后,我們可以通過在同一版面根據(jù)提示輸入相關(guān)信息,即可得到模擬過程。雖然只有一個版面,但是發(fā)送方和接收方的功能是清晰的、相對齊全的。發(fā)送方和接收方的設(shè)計流程如下:圖33 發(fā)送方與接收方設(shè)計流程根據(jù)流程圖的實現(xiàn)步驟,我編寫了以下的代碼。(1)發(fā)送方程序:本程序設(shè)有四個變量:一是窗口大小變量,二是第一幀序列號變量,三是最近發(fā)送的幀變量,最后一個是最近收到的確認(rèn)幀變量。=NULL。 //變量初始值為空=sendq_rear=(structsendq_slot*)malloc(sizeof(structsendq_slot)。if(!) exit(1)。sendq_rearnext=NULL。printf(請輸入窗口大?。?。scanf(%ld,amp。)。 //輸入窗口大小=。 //把窗口大小的值賦給變量if (0){ printf(請輸入第一幀的序列號:)。 scanf(%ld,amp。)。 //輸入第一幀序列號}=。 //把第一幀的值放進(jìn)緩沖池內(nèi)sendp=(struct sendq_slot*) malloc (size of(struct sendq_slot))。 if(!sendp) exit(1)。sendpmsg=。sendptimeout=1。sendpnext=NULL。sendq_rearnext=sendp。sendq_rear=sendp。=。 //最近發(fā)送的幀取值=。 //最近收到的確認(rèn)幀取值do{ while(0) //當(dāng)窗口大小大于0時,執(zhí)行以下的循環(huán) { sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot))。 if(!sendp) exit(1)。 sendpmsg=+1。 //如果輸入的幀序號大于之前幀序號,那么窗口向前滑動 sendptimeout=1。 //時延為1 sendpnext=NULL。 sendq_rearnext=sendp。 sendq_rear=sendp。 。 ++。 }=0。 //ACK清空=0。 //存儲緩沖池清空printf(最近收到的ACK的幀序號:%ld\n,)。 //輸出最近收到的ACK幀序號printf(最近發(fā)送的幀序號(發(fā)送新幀后):%ld\n,)。//輸出最近發(fā)送幀序號(2)接收方程序:收到的包是否含有Push標(biāo)志?收到包的序號與等待接收的序號是否一致?收到包的序號在接收窗口范圍內(nèi)?NY直接提取數(shù)據(jù),提前應(yīng)用進(jìn)程Y入接收隊列YN處理在接收隊列中的包(如果是普通包要判斷序號,或者進(jìn)行拆包,組包操作)結(jié)束N圖34 數(shù)據(jù)包接收過程l 接收方的接收原則從總體上看是先判斷輸入的數(shù)據(jù)幀是否在接收范圍之內(nèi),若是,則繼續(xù)判斷是否符合其他接收條件;若不是,則馬上丟棄該數(shù)據(jù)幀,不再進(jìn)行其他條件的判斷。struct sendq_slot *sendq_rear,*sendp,*p3,*p4。 //設(shè)定變量struct recvq_slot *recvp,*recvq_rear,*p1,*p2。 if(==0) //上次輸入的數(shù)據(jù)幀被放置在緩存區(qū),輸入?yún)^(qū)被清空 { do //如果繼續(xù)接收數(shù)據(jù)幀則實施下面循環(huán) { printf(請輸入收到的數(shù)據(jù)幀號:)。 scanf(%ld,amp。a)。 if(a=amp。amp。a=) //判斷數(shù)據(jù)幀應(yīng)被接收或緩存 { if(==NULL) { recvp=recvq_rear=(structrecvq_slot*)malloc(sizeof(structrecvq_slot))。 recvpnext=NULL。 =recvp。 } else if(!=NULL) { recvp=(struct recvq_slot*)malloc(sizeof(struct recvq_slot))。 recvpnext=NULL。 recvq_rearnext=recvp。 recvq_rear=recvp。 } } else { printf(所輸數(shù)據(jù)不在接收窗口內(nèi)!)。 break。 //跳出該循環(huán) }l 若輸入數(shù)據(jù)幀在接收范圍內(nèi)則繼續(xù)判斷并進(jìn)行以下循環(huán)。 recvpmsg=a。 if(recvpmsg==) //是否放入緩存判斷 recvpreceived=1。 else recvpreceived=0。 。 if(recvpreceived==1) //數(shù)據(jù)幀被接收,則進(jìn)行下面語句 { a=a1。 do { a=a+1。 if(==NULL) break。 p1=。 flag=0
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦

基于聲卡的模擬電路測試平臺設(shè)計與實現(xiàn)-資料下載頁

【總結(jié)】電》