📄 ting-deng-xie-yi.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 + -