rdt3.0发送方和接收方程序(C实现)
来源:互联网 发布:我为歌狂 知乎 编辑:程序博客网 时间:2024/05/17 07:27
刚好做网络原理的实验用到了这个东西.发上来大家和大家共享下^_^(貌似有的地方不是很对,如果有用的话还是注意下吧)
Sender:
#include <stdio.h>
void sendata0();
void start();
void waitack();
void retrans1();
void retrans0();
void sendata1();
void main ()
{
int a;
int b;
int c;
int d;
start();//开始程序
return;
}
void start(){
int a ;
while (a!=1&&a!=2)
{
printf("******************************/n");//初始页面
printf("欢迎进入rdt 3.0 发送方演示/n");
printf("1: 进入数据发送 2: 退出演示/n");
printf("请你输入你要到的选择: ");
scanf("%d",&a);
printf("*********************************************************/n");
}
if (a==1)
sendata0();// 发送序号为0的数据抱
if (a==2)
exit (0);//退出程序
}
//*******************************************************************
void sendata0() //发送序号为0的数据包
{
int b;
while (b!=1&&b!=2)
{
printf("现在要发送序号为0的数据包,确认吗?/n");
printf("1: 确认 2:退出");
scanf("%d",&b);
printf("*********************************************************/n");
}
if (b==1)
waitack();//等待接收ack信息
if (b==2)
start();//返回开始程序
}
void waitack(){
int c;
while (c!=1&&c!=2&&c!=3&&c!=4){
printf("序号为0的数据包已经发送!!计时器已经启动:-)/n");
printf("请选择事件/n");
printf("1: 接收到ack0 2:接收到ack1 3:接收到错误的ack 4:超时了!!/n");
scanf("%d",&c);
printf("*********************************************************/n");
}
if (c==2||c==3||c==4)
retrans0(); //重新发送序号为0的数据包;
if (c==1)
sendata1();//发送序号为1的数据包;
}
void retrans0(){
printf("将重新发送序号为0的数据包/n");
waitack();//等待ack
}
void sendata1(){
int d;
printf("现在将要发送序号为1的数据包/n");
while (d!=1&&d!=2&&d!=3&&d!=4)
{
printf("序号为1的数据包已经发出,正在等待回应/n");
printf("1:收到ack1 2:收到ack0 3:超时了! 4:收到错误信息/n");
printf("请选择事件");
scanf("%d",&d);
printf("*********************************************************/n");
}
if (d==2||d==3||d==4)
retrans1();//重传1号数据包
if (d==1)
sendata0();//回到要发送0号数据包
}
void retrans1(){
printf("要重新发送序号为1的数据包/n");
sendata1();//重发1号数据包
}
Receiver:
#include <stdio.h>
void start();
void recv0();
void recall0();
void sendack1();
void recall1();
void sendack0();
void recv1();
void main(){
int a;
int b;
int c;
int d;
int e;
start();//开始的画面
return;
}
void start(){
int a;
while (a!=1&&a!=2){
printf("*******************************/n");
printf("欢迎使用rdt 3.0 接收方演示!!!/n");
printf("1:进入接收的演示 2:退出/n");
printf("请输入你的选择");
scanf("%d",&a);
printf("**********************************/n");
}
if (a==1)
recv0();//进入接收数据包0的状态
if (a==2)
exit (0);//退出程序
}
void recv0(){
int b;
while (b!=1&&b!=2&&b!=3){
printf("发送方已经发送了序号为0的数据包/n");
printf("请选择事件:/n");
printf("1:接收到正确的数据 2:接收到错误的数据 3:超时/n");
scanf("%d",&b);
printf("*******************************/n");
}
if (b==1)
sendack1();//对接收到的数据包进行确认
if (b==2||b==3)
recall0();//发送信息让发送方重传
}
void sendack1(){
int c;
while (c!=1&&c!=2){
printf("已经正确接收序号为0的数据包!!/n");
printf("请选择事件!/n");
printf("1:发送ack0 2:退出/n");
scanf("%d",&c);
printf("*****************************/n");
}
if (c==1)
recv1();//转为等待接收序号为1的数据包的状态
if (c==2)
start();//返回开始状态
}
void recall0(){
printf("需要发送ack1让发送方重传!!/n");
printf("ack1已经送出!!!/n");
printf("****************************/n");
recv0();
}
void recv1(){
int d;
while (d!=1&&d!=2&&d!=3) {
printf("发送方已经发送了数据包1 !!/n");
printf("请选择事件/n");
printf("1:接收到正确的数据 2:接收到错误的数据 3:超时/n");
scanf("%d",&d);
printf("*************************/n");
}
if (d==1)
sendack0();
if (d==2||d==3)
recall1();
}
void sendack0(){
int e;
while (e!=1&&e!=2){
printf("已经接收到序号为1的数据包!!/n");
printf("请选择事件/n");
printf("1:发送ack1 2:退出");
scanf("%d",&e);
printf("*************************/n");
}
if (e==1)
recv0();
if (e==2)
start();
}
void recall1(){
printf("需要发送ack0来让发送方重传!!/n");
printf("ack0已经发送!!!/n");
printf("***********************/n");
recv1();
}
代码出自手头上的参考资料..
- rdt3.0发送方和接收方程序(C实现)
- rdt3.0发送方程序(Java实现)
- C#事件的发送方和接收方
- C#事件的发送方和接收方(订阅方)
- C#事件的发送方和接收方(订阅方)
- 关于串口通信时,接收方要0xAABB,发送方应该怎么发送
- java se 面向网络的编程(socket发送方和接收方)
- API两个程序间信息的传送与接收,一方发送另一方自动接收.
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- 纯 java 实现 Http 资源读取工具,支持发送和接收数据,不依赖任何第三方 jar 包
- 由于AddressFilter在EndpointDispatcher不匹配,To 为“http://*/*”的消息无法在接收方处理。请检查发送方和接收方的 EndpointAddresses 是否一致
- 由于AddressFilter在EndpointDispatcher不匹配,To 为“http://*/*”的消息无法在接收方处理。请检查发送方和接收方的 EndpointAddresses 是否一致
- C++第三方库HPSocket数据的发送与接收
- HttpConnection的post请求发送数据,接收方出现乱码
- 解决SOAPUI 调用WCF的服务返回由于 AddressFilter 在 EndpointDispatcher 不匹配,To 为“”的消息无法在接收方处理。请检查发送方和接收方的 Endpoin
- OpenJMS程序实现消息的发送和接收
- 串口通信程序中十六进制格式发送和接收实现
- 串口通信程序中十六进制格式发送和接收实现
- 正则表达式中的特殊字符
- 关于DNS服务器的配置问题(推荐)
- 在Windows XP家庭版安装IIS
- 通过内核httpd实现web服务加速
- 反NP监视原理(+Bypass NP in ring0)
- rdt3.0发送方和接收方程序(C实现)
- Google Adsense广告申请注册指南
- 在Win 2003环境中设置一个Web服务器
- 什么是FTP及FTP服务器
- 对文件进行EFS加密和解密
- [精华] Debian网络安装指南
- SSDT Hook的妙用-对抗ring0 inline hook
- 网站如何赚钱
- 设置一台虚拟的FTP服务器