注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 

操作系统实验报告——单工停等协议  

2007-12-05 23:27:30|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

实验名称:编写程序实现单工停等协议的演示

实验目的:让我们更加了解单工停等协议的原理,和传送信息的过程及各种                                                                                         传送错误的解决方法。   

实验要求:用可视化图形界面实现演示过程,能够实现各种差错的显示及解决方法的显示。

实验分析:单工停等协议是在传送了一帧后,要等到一个确认帧或者超时才         传送下一帧,其前提条件数据只能单向传输、处理时间被忽略。在发送方必须要   有个定时器,以便进行超时重传;设定当接收方接收到错误帧时,不发送确认帧,   等待发送方超时重传;设定当接收方接收到相同帧时,比较编号之后抛弃一个,再准备接收下一帧。

接收方

实验示意图:

发送方

                                                         

 

接收正确,发送确认

第一帧

(收到确认发送)第二帧

接收错误,等待超时重发

(超时重发)第二帧

接收正确,发送确认

(确认超时重发)第二帧

比较编号重复,抛弃

(收到确认发送)第三帧

接收正确,发送确认

实验心得:因第一次实验做得不是很好,且自己不会用一门好的开发工具,所以上次实验后去图书馆借了一本VC来看,那有点难,学了很久也不知道是怎么回事,而关于图形界面编程就更难了,心里感觉不怎么好,而这次实验要比上次实验难, 所以我就更难做出来了,上次实验我还做出来了,这次我除了懂单工停等协议的原理之外,其它我什么都不会。周老师VC很难学,那是比较专业的开发工具,建议我们去学VB,说VB很容易上手。不知道是不是真的,反正先去借本书来看看,希望能学到些东西,下次实验上机的时候能够有事情做,这次实验做得不好,希望下次我能够做好。

实验参考书:《计算机网络(第四版)》

 

 

实验代码:

#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();

}

  评论这张
 
阅读(409)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017