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

  • 大小: 4KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-16
  • 語言: 其他
  • 標簽: socket??TCP??滑動窗口??

資源簡介

理解數(shù)據(jù)鏈路層的滑動窗口協(xié)議,完整實現(xiàn)滑動窗口協(xié)議中的1bit滑動窗口協(xié)議,通過socket實現(xiàn)TCP連接來進行模擬

資源截圖

代碼片段和文件信息

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

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

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

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

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

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

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

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

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

return?TRUE;
}

//////////////////////////////////////////////////////////////////////////
//初始化發(fā)送端監(jiān)聽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;?
}
//創(chuàng)建socket
*socketRecv?=?socket(AF_I

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

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

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

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

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


評論

共有 條評論