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

正文內(nèi)容

cbn協(xié)議實現(xiàn)(c語言)(編輯修改稿)

2025-06-13 13:29 本頁面
 

【文章內(nèi)容簡介】 +。 } } } //B 端向外發(fā)送數(shù)據(jù) /* 被第五層調(diào)用,發(fā)送數(shù)據(jù)到另一方 ,同 A 方相似 */ void B_output(struct msg message) { int i。 struct pkt sendpkt。 /* 如果發(fā)送窗口不滿 */ if ( nextseqnum base+WINDOWSIZE ) { printf(B:新的包到達(dá),發(fā)送窗口不滿,新的包送往第 3 層! !\n)。 /* create packet */ = nextseqnum。 = NOTUSED。 for ( i=0。 i20 。 i++ ) [i] = [i]。 /* puter checksum */ ComputeChecksum (amp。sendpkt)。 /* send out packet */ tolayer3 (A, sendpkt)。 A_input(sendpkt)。 /* copy the packet to window packet buffer */ winrear = (winrear+1)%WINDOWSIZE。 pktnum ++。 winbuf[winrear] = sendpkt。 for (i=0。 i20。 i++) winbuf[winrear].payload[i]= [i]。 /* if it is the first packet in window, start timeout */ //if ( base == nextseqnum ) //{ //starttimer(A,RTT)。 //printf(A: start a new timer!\n)。 // } /* update state variables */ nextseqnum = nextseqnum+1。 } /* 如果發(fā)送窗口滿 */ else { printf(B:新的包到達(dá),發(fā)送窗口已滿 !,)。 /* if buffer full, give up and exit*/ if ( msgnum == MAXBUFSIZE) { printf ( 錯誤:發(fā)送緩沖區(qū)已滿 ! \n)。 exit (1)。 } /* otherwise, buffer the message */ else { printf(緩沖區(qū)滿 !\n)。 bufrear = (bufrear+1) % MAXBUFSIZE。 for (i=0。 i20。 i++) buffer[bufrear].data[i] = [i]。 msgnum ++。 } } } //A 端接收數(shù)據(jù) void A_input(struct pkt packet) { struct pkt sendpkt。 int i。 /* 如果收到?jīng)]有被破壞的包并且確認(rèn)包收到 */ if ( (CheckCorrupted(packet) == FALSE) amp。amp。 ( != NACK) ) { printf(A: ACK(確認(rèn)包 ) %d 被正確的收到 ,)。 packet_correct++。 /* 從窗口緩沖區(qū)刪去被確認(rèn)的包 */ winfront = (winfront+(+1base)) % WINDOWSIZE。 pktnum = pktnum (+1base)。 /* 改變窗口最小號確認(rèn)包 */ base = +1。 stoptimer(A)。 if ( base nextseqnum) { //starttimer(A,RTT)。 printf (\n\n\n 發(fā)送新的包 !)。 } /* 如果緩沖區(qū)不空發(fā)送新的包 */ while ( (msgnum!=0) amp。amp。 (nextseqnumbase+WINDOWSIZE) ) { /* 創(chuàng)建包 */ = nextseqnum。 = NOTUSED。 buffront = (buffront+1) % MAXBUFSIZE。 for ( i=0。 i20 。 i++ ) [i] = buffer[buffront].data[i]。 /* 和確認(rèn) */ ComputeChecksum (amp。sendpkt)。 /*如果是滑動窗口的第一個包,開始超時檢測 */ if ( base == nextseqnum ) //如果滑動窗口最小的包等于下一次要發(fā)送的序號 { //starttimer(A,RTT)。 printf (發(fā)送新的包 !\n)。 } /* 送出包 */ tolayer3 (A, sendpkt)。 /* 復(fù)制包到窗口緩沖區(qū) */ winrear = (winrear+1)%WINDOWSIZE。 winbuf[winrear] = sendpkt。 pktnum ++。 /* 更新狀態(tài)變量 */ nextseqnum = nextseqnum+1。 /* 刪除緩沖區(qū)的包 */ msgnum 。 } } else printf (A: 收到否定應(yīng)答,什么也沒有完成 !\n)。 } //B 端接收數(shù)據(jù) *****************************************************一定要調(diào)用這個 /* 這只是單一的 A 到 B 的傳送方式,沒有 B 端的數(shù)據(jù)發(fā)出 */ /* 被第三層調(diào)用,但數(shù)據(jù)到達(dá) B 端第 4 層 */ void B_input(struct pkt packet) { struct pkt sendpkt。 int i。 /*如果收到?jīng)]有被破壞的包并且確認(rèn)包收到 */ if ( (CheckCorrupted(packet) == FALSE) amp。amp。 ( == expectedseqnum)) { printf(\nB: 包 正確的到達(dá),發(fā)送 ACK 確認(rèn)包 \n,)。 /* 發(fā)送應(yīng)答包 */ /* create packet */ = NOTUSED。 = expectedseqnum。 for ( i=0。 i20 。 i++ ) [i] = 39。039。 /* puter checksum */ ComputeChecksum (amp。sendpkt)。 /* send out packet */ //tolayer3 (B, sendpkt)。 /* update state variables */ expectedseqnum = expectedseqnum+1。 printf(B:expectedseqnum ( 期 待 下 一 次 的 發(fā) 送 序號 )= %d\n,expectedseqnum)。 /* 發(fā)送包到第五層 */ //tolayer5(B,)。 } /* 否則,拋棄包,發(fā)送否定應(yīng)答 */ else { printf(B: 包 %d 損 壞 或 者 不 是 我 所 需 要 的 , 發(fā) 送 否 定 應(yīng)答 !\n,)。 /* 創(chuàng)建包 */ = NOTUSED。 = NACK。 for ( i=0。 i20 。 i++ ) [i] = 39。039。 /* 校檢和檢查 */ ComputeChecksum (amp。sendpkt)。 /* 發(fā)出包 */ tolayer3 (B, sendpkt)。 } } //A 計時器超時 /* A 超時被調(diào)用 */ void A_timerinterrupt() { int i。 printf(A:超時?。?!
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1