xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡介

理解數據鏈路層的滑動窗口協議,完整實現滑動窗口協議中的1bit滑動窗口協議,通過socket實現TCP連接來進行模擬

資源截圖

代碼片段和文件信息

#pragma?comment(lib?“ws2_32.lib“)
#include???
#include????
#include?

//////////////////////////////////////////////////////////////////////////
//接收幀
//////////////////////////////////////////////////////////////////////////
BOOL?Receiveframe(int?*?frameExceptint?*?frameRecvint?winRecvSizeSOCKET?socket)
{
char?recvBuffer[128];//接收數據?
int?frameNum;//接收幀號

????//從發送端接收幀???
if(recv(socketrecvBuffersizeof(recvBuffer)0)?==?SOCKET_ERROR)
{
printf(“接收數據失敗!\n“);
return?FALSE;
}
frameNum?=?atoi(recvBuffer);
if?(frameNum?!=?*frameExcept)//接收幀和希望接收幀號不匹配
{
printf(“所要接收的幀和接收到的幀不匹配!,要接收的幀號是:%d接收到的幀號是:%d\n“*frameExceptframeNum);
return?FALSE;
}
else//接收幀和希望接收幀號匹配
{
*frameRecv?=?frameNum;
printf(“已經成功地接收幀%d,接收端窗口大小是:%d\n“*frameRecvwinRecvSize);
}?
return?TRUE;
}

//////////////////////////////////////////////////////////////////////////
//發送ACK
//////////////////////////////////////////////////////////////////////////
BOOL?SendACK(int?*?frameExceptint?*?frameRecvSOCKET?socket)
{
//通過隨機數隨機產生正確ACK幀號、錯誤ACK幀號以及不發送ACK幀
char?sendBuffer[128];//發送數據

int?random?=?0;//隨機數012,0表示返回正確ACK?1表示返回錯誤ACK?2表示不返回ACK

random?=?rand()%3;
if?(random?==?0)//表示正確接收,并且正確回復ACK
{

if?(_snprintf(sendBuffersizeof(sendBuffer)-1“%d“*frameRecv)? {
printf(“寫數據出錯!\n“);
return?FALSE;
}
else
{
sendBuffer[sizeof(sendBuffer)-1]?=?‘\0‘;
}
//發送正確的ACK
if(send(socketsendBuffersizeof(sendBuffer)0)?==?SOCKET_ERROR)
{
printf(“發送數據失敗!\n“);
return?FALSE;
}
else
{
*frameExcept?^=?1;//經過確認,準備接受下一幀
printf(“針對已經接收到的幀%d回復ACK,回復的ACK號是%d:\n\n“*frameRecv*frameRecv);
}

}
else?if?(random?==?1)//表示正確接收,并且錯誤回復ACK
{

if?(_snprintf(sendBuffersizeof(sendBuffer)-1“%d“(*frameRecv)^1)? {
printf(“寫數據出錯!\n“);
return?FALSE;
}
else
{
sendBuffer[sizeof(sendBuffer)-1]?=?‘\0‘;
}
//發送錯誤的ACK
if(send(socketsendBuffersizeof(sendBuffer)0)?==?SOCKET_ERROR)
{
printf(“發送數據失敗!\n“);
return?FALSE;
}
else
{
printf(“針對已經接收到的幀%d回復ACK,回復的ACK號是%d:\n\n“*frameRecv(*frameRecv)^1);
}
}
else//表示正確接收,并且不回復ACK
{
//不發送ACK
printf(“沒有針對已經接收到的幀%d發送ACK\n\n“*frameRecv);
}

return?TRUE;
}

//////////////////////////////////////////////////////////////////////////
//初始化發送端監聽socket
//////////////////////////////////////////////////////////////////////////
BOOL?InitSocketReceiver(SOCKET?*?socketRecv)
{
WORD?wVersionRequested;
WSADATA?wsaData;
SOCKADDR_IN?addrSender;?
int?length?=?sizeof(struct?sockaddr);
//版本
wVersionRequested?=?MAKEWORD(11);?

//啟動
if?(WSAStartup(?wVersionRequested?&wsaData)?!=?0)
{
printf(“啟動socket不成功!\n“);
return?FALSE;
}
if?(?LOBYTE(?wsaData.wVersion?)?!=?1?||?HIBYTE(?wsaData.wVersion?)?!=?1?)?
{
printf(“版本錯誤!\n“);
WSACleanup(?);
return?FALSE;?
}
//創建socket
*socketRecv?=?socket(AF_I

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

?????文件???????4774??2010-04-01?12:15??SlideWindowReceiver.c

?????文件???????4830??2010-04-05?00:59??SlideWindowSender.c

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

?????????????????9604????????????????????2


評論

共有 條評論