⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ting-deng-xie-yi.txt

📁 大部分的通信都不是一方只是发送
💻 TXT
字号:



停等协议规定




停等协议的最大缺点是:

     发送方要停下来等待返Ack回后再继续发送而造成信道浪费。 设信道容量是B b/s,帧长度为L bits,信号在信道中的往返传播延迟时间是2R, 并假定返回的Ack帧很短,不占用信道时间,则在一个周期中实际用于发送的时间L/B, 而空等待的时间的是2R。因此,信到的实际有效利用率只有: 


U=(L/B)/[(L/B)+2R]=L/(L+2RB)

     这对于传播延迟时间长的高速信道特别不利。 此外,由于信道差错收不到Ack而造成超时重传,以及有效传送的数据必须加上箭头(包括用于校验的冗余位)构成帧来发送,也都会造成信道有效利用率损失。 

 

    停等协议的捎带确定 

      大部分的通信都不是一方只是发送,而另一方只是接收,而是双向的。因此在这种情况下返回的Ack帧通常可由反向发送的数据帧一起捎带回来。这只要在数据帧中再加一个确认帧号就可以了。这种技术称作捎带确认。 
发送端:

#include<stdio.h> 
#include<stdlib.h> 


client() 
{ 
int i=0; 
char ch,a[20],c; 
FILE *fp1,*fp2; 
textcolor(3); 
clrscr(); 
printf("Receive:\n"); 
fp1=fopen("c:\\server1.txt","rb"); 
ch=fgetc(fp1); 
fp2=fopen("c:\\num1.txt","rb"); 
while(ch!='\n'&&ch!=EOF) 
{ 


c=fgetc(fp2); 
if(c=='0') 
{ 
printf("send again\n"); 


} 
else 
if(c=='1') 
{ 
printf("%c",ch); 
printf("\tsuccess\n"); 
ch=fgetc(fp1); 

} 

sleep(2); 
} 
fclose(fp1); 
fclose(fp2); 

} 
main() 
{ client(); 
printf("Please any key....."); 
getchar(); 


}

接受端:

#include<stdio.h> 
#include<string.h> 



server() 
{ 
int i,t; 
char ch,a[20],c; 
FILE *fp1,*fp2,*fp3,*fp4; 
textcolor(2); 
clrscr(); 
i=0; 
t=0; 
printf("Sent a message:\n"); 

fp1=fopen("c:\\server.txt","wb"); /*存要发送的数据*/ 
fp3=fopen("c:\\server1.txt","wb"); 
ch=getchar(); 
fputc(ch,fp1); 
fputc(ch,fp3); 
while(ch!='\n') 
{ 
ch=getchar(); 
fputc(ch,fp1); 
fputc(ch,fp3); 
} 
fclose(fp1); 
fclose(fp3); 
fp2=fopen("c:\\num.txt","wb"); 
fp4=fopen("c:\\num1.txt","wb"); 
for(i=0;i<30;i++) 
{ 
t=rand()%2; 
if(t==0) 
{ 
c='0'; 
fputc(c,fp2); 
fputc(c,fp4); 
} 
else 
if(t==1) 
{ 
c='1'; 
fputc(c,fp2); 
fputc(c,fp4); 
} 
} 
fclose(fp2); 
fclose(fp4); 
fp1=fopen("c:\\server.txt","rb"); /*开始发送信息*/ 
ch=fgetc(fp1); 
fp2=fopen("c:\\num.txt","rb"); 
c=fgetc(fp2); 
while(ch!='\n') 
{ 
printf("%c",ch); 
a[i]=ch; 

if(c=='1') 
{ 
printf("\t\tACK"); 
i++; 
ch=fgetc(fp1); 
} 
else 
{ 
ch=a[i]; 
} 
c=fgetc(fp2); 
printf("\n"); 
sleep(2); 

} 
fclose(fp1); 
fclose(fp2); 

} 
main() 
{ 
server(); 
printf("Please any key....."); 
getchar(); 

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -