此程序是用C++进行模拟tcp的“滑动窗口”操作,具体操作如下:
1、首先在提示下发送端输入发送信息和窗口大小
2、调用tcp()函数进行将发送端信息发送给接收端操作
3、具体具体原理如下:
1)发送端每次将窗口大小的信息传给接收端
2)接收端对收到信息进行存储,并发送ack确认给发送端
示例:
1、输入“qwertyuiopasdfghklzxc”作为发送信息
2、输入“5”作为窗口大小
4、输出tcp传输的过程
代码如下:
#include <iostream>
#include <string.h>
using namespace std;void print(char (*m)[30],char *n,int s,int l){int i;cout<<"发送端如下↓"<<endl;cout<<"信息队列:";for(i=0;i<l;i++)cout<<m[0][i]<<' ';cout<<endl<<" ack接收:";for(i=0;i<l;i++)cout<<m[1][i]<<' ';cout<<endl<<endl<<"接收端如下↓"<<endl;cout<<"信息队列:";for(i=0;i<l;i++)cout<<n[i]<<' ';cout<<endl<<endl;
}int tcp(char (*m)[30],char *n,int s,int l)
{char ack[7]="123456";int i,j,k;j=i=0;k=1;cout<<"-------------------------------------------------------"<<endl;cout<<"发送信息为:"<<m[0]<<endl;cout<<"发送信息长度为:"<<l<<endl;cout<<"发送窗口大小为:"<<s<<endl;while(i<l){for(;j<s && i<l;i++){n[i]=m[0][i];m[1][i] = ack[j++];}j=0;cout<<"-------------------------------------------------------"<<endl;cout<<"第"<<k<<"次传输结果:"<<endl;print(m,n,s,l);k++;}
}
int main()
{int l,s; ///l表示发送信息的长度,char m[2][30]; ///用二维字符组表示发送端发送信息内容与接收到的ack确认信息char n[30]; ///用字符串表示接收端接收信息cout << "请输入发送端信息:" << endl;cin>>m[0];l=strlen(m[0]);while(1){cout << "请输入窗口大小(小于等于6):" << endl;cin>>s;if (s<=5)break;}for(int j = 0;j<l;j++){n[j]='\0';m[1][j]='\0';}tcp(m,n,s,l);return 0;
}