91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

上傳的文件中包含《計算機網絡實驗系統 NetRiver2000》中的前九個實驗,代碼思路清晰,注釋詳盡

資源截圖

代碼片段和文件信息

#include?“sysinclude.h“
#include?
#include?
#include?
#include?
#include?
using?namespace?std;

extern?void?SendframePacket(unsigned?char*?pData?unsigned?int?len);

#define?WINDOW_SIZE_STOP_WAIT???????????1
#define?WINDOW_SIZE_BACK_N_frame????????4


#define?MAX_DATA_SIZE???????????????????100

typedef?enum?{data?ack?nak}?frame_kind;
typedef?struct
{
????frame_kind??kind;???????????????????//?kind?of?frame
????unsigned?int?seq;???????????????????//?seq?no?of?frame
????unsigned?int?ack;???????????????????//?ack?no?of?frame
????unsigned?char?data[MAX_DATA_SIZE];??//?data
}frame_head;

typedef?struct
{
????frame_head?head;????????????????????//?frame?head
????unsigned?int?size;??????????????????//?frame?sizei?actual?size?of?data
}frame;

/*
?*?停等協議測試函數
?*?參數說明:
?***?pBuffer????指針,系統要發送或者已經接收到的幀內容,或者指向超時信息中
????????????????的超時幀序號
?***?bufferSize?????pBuffer表示內容的長度
?***?messageType????傳入消息的類型,可選項由宏定義
?*?返回值:
?***?0??發送成功
?***?-1?發送失敗
?*/
int?stud_slide_window_stop_and_wait(char?*pBuffer?
????????????????????????????????????int?bufferSize?
????????????????????????????????????UINT8?messageType)
{
????/*
?????*?為方便后續兩個函數的編程,我們定義兩個隊列:
?????***?waitQueue
?????******?暫時無法發送的數據包(沒有可用窗口),緩存在該隊列中;
?????***?confirmQueue
?????******?已經發送但是尚未確認的數據包,緩存在該隊列中;
?????*?注:對于停止等待協議而言,confirmQueue其實不需要,我們可以使用一個結構體記錄
?????*?尚未確認的數據包即可,因為該協議中,尚未確認的數據包數目永遠不會大于1。
?????*/
????static?queueame>?waitQueue;
????static?vectorame>?confirmQueue;
????static?unsigned?int?expectedNo?=?0;???//?記錄當前期望收到的數據包?seq?no

????/*
?????*?當上層傳來一個新數據包?i?時,我們需要進行如下判斷:
?????*?Case1...messageType?==?MSG_TYPE_SEND
?????***?Subcase1...waitQueue?不為空
?????******?我們采用?FIFO?方案,此時僅僅需要將?i?掛載到?waitQueue?隊列尾部,
????????????并且為之標記序號;
?????**?Subcase2...waitQueue?為空
?????******?我們需要進一步判斷:
????????????Subsubcase1...confirmQueue?為空
????????????????我們直接發送當前數據包
????????????Subsubcase2...comfirmQueue?不為空
????????????????將數據包?i?掛載到?waitQueue?隊列,并為之標記序號
?????***?Case2...messageType?==?MSG_TYPE_RECEIVE?&&?ACK
?????******?此時檢查?ACK(i)?所響應的數據包?(i-1)?是否存在于?confirmQueue:
????????????如果存在則直接刪除,并且檢查?waitQueue?中是否存在需要發送的數據包;
????????????如果不存在,直接丟棄當前ACK數據包
?????***?Case3...messageType?==?MSG_TYPE_TIMEOUT
?????******?如果?confirmQueue?中存在數據包,則重新發送這個數據包;
????????????如果不存在,說明程序出現bug;
?????*/
????switch(?messageType?)
????{
????????case?MSG_TYPE_TIMEOUT:
????????{
????????????if?(?confirmQueue.size()?==?0?)
????????????????return?-1;
????????????assert(confirmQueue.size()?==?1);
????????????SendframePacket((unsigned?char?*)&confirmQueue.front()
????????????????????????????confirmQueue.front().size);
????????????return?0;
????????}
????????case?MSG_TYPE_SEND:
????????{
????????????frame?sendframe;
????????????memcpy(?(void?*)&sendframe.head
????????????????????(void?*)pBuffer
????????????????????bufferSize?);
????????????sendframe.size?=?bufferSize;

????????????if?(?waitQueue.empty

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????10322??2012-09-06?14:44??labs\lab01.cpp

?????文件???????6621??2012-09-06?14:44??labs\lab02.cpp

?????文件???????6510??2012-09-06?14:44??labs\lab03.cpp

?????文件???????5204??2012-09-06?14:44??labs\lab04.cpp

?????文件???????7137??2012-09-06?14:41??labs\lab05.cpp

?????文件??????13459??2012-09-06?14:44??labs\lab06.cpp

?????文件??????18633??2012-09-06?14:43??labs\lab07.cpp

?????文件??????10256??2012-09-06?14:44??labs\lab08.cpp

?????文件???????6606??2012-06-12?14:35??labs\lab09.cpp

?????目錄??????????0??2012-09-07?18:42??labs

-----------?---------??----------?-----??----

????????????????84748????????????????????10


評論

共有 條評論